]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: check if the schedule is already running
authorMoises Silva <moy@sangoma.com>
Sun, 27 Jun 2010 22:35:31 +0000 (18:35 -0400)
committerMoises Silva <moy@sangoma.com>
Sun, 27 Jun 2010 22:35:31 +0000 (18:35 -0400)
libs/freetdm/src/ftdm_sched.c

index fc9fe6044695fa83aba05273d3ff06c7d929f0f7..5aacc202bf83f460475e4a550f04949b391c85b1 100644 (file)
@@ -128,8 +128,16 @@ FT_DECLARE(ftdm_status_t) ftdm_sched_free_run(ftdm_sched_t *sched)
        ftdm_status_t status = FTDM_FAIL;
        ftdm_assert_return(sched != NULL, FTDM_EINVAL, "invalid pointer\n");
 
+       ftdm_mutex_lock(sched->mutex);
+
        ftdm_mutex_lock(sched_globals.mutex);
 
+       if (sched->freerun) {
+               ftdm_log(FTDM_LOG_ERROR, "Schedule %s is already running in free run\n", sched->name);
+               goto done;
+       }
+       sched->freerun = 1;
+
        if (sched_globals.running == FTDM_FALSE) {
                ftdm_log(FTDM_LOG_NOTICE, "Launching main schedule thread\n");
                status = ftdm_thread_create_detached(run_main_schedule, NULL);
@@ -154,6 +162,8 @@ FT_DECLARE(ftdm_status_t) ftdm_sched_free_run(ftdm_sched_t *sched)
 
 done:
        ftdm_mutex_unlock(sched_globals.mutex);
+
+       ftdm_mutex_unlock(sched->mutex);
        return status;
 }