[asterisk-commits] twilson: branch twilson/calendaring r166945 - /team/twilson/calendaring/main/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Dec 30 18:05:21 CST 2008
Author: twilson
Date: Tue Dec 30 18:05:20 2008
New Revision: 166945
URL: http://svn.digium.com/view/asterisk?view=rev&rev=166945
Log:
Avoid race condition when sleeping for refresh as pointed out by russell on reviewboard
Modified:
team/twilson/calendaring/main/calendar.c
Modified: team/twilson/calendaring/main/calendar.c
URL: http://svn.digium.com/view/asterisk/team/twilson/calendaring/main/calendar.c?view=diff&rev=166945&r1=166944&r2=166945
==============================================================================
--- team/twilson/calendaring/main/calendar.c (original)
+++ team/twilson/calendaring/main/calendar.c Tue Dec 30 18:05:20 2008
@@ -542,8 +542,10 @@
if (alarm_notify_sched <= 0) {
alarm_notify_sched = 1;
}
+ ast_mutex_lock(&refreshlock);
AST_SCHED_REPLACE(old_event->notify_sched, sched, alarm_notify_sched, calendar_event_notify, old_event);
- ast_debug(3, "(1)Calendar alarm event notification scheduled to happen in %ld ms\n", alarm_notify_sched);
+ ast_mutex_unlock(&refreshlock);
+ ast_debug(3, "Calendar alarm event notification scheduled to happen in %ld ms\n", alarm_notify_sched);
}
}
@@ -555,15 +557,19 @@
devstate_sched_start = 1;
}
+ ast_mutex_lock(&refreshlock);
AST_SCHED_REPLACE(old_event->bs_start_sched, sched, devstate_sched_start, calendar_devstate_change, old_event);
- ast_debug(3, "(1)Calendar bs_start event notification scheduled to happen in %ld ms\n", devstate_sched_start);
+ ast_mutex_unlock(&refreshlock);
+ ast_debug(3, "Calendar bs_start event notification scheduled to happen in %ld ms\n", devstate_sched_start);
}
if (!cmp_event || old_event->end != event->end) {
changed = 1;
devstate_sched_end = (event->end - now.tv_sec) * 1000;
+ ast_mutex_lock(&refreshlock);
AST_SCHED_REPLACE(old_event->bs_end_sched, sched, devstate_sched_end, calendar_devstate_change, old_event);
- ast_debug(3, "(1)Calendar bs_start event notification scheduled to happen in %ld ms\n", devstate_sched_end);
+ ast_mutex_unlock(&refreshlock);
+ ast_debug(3, "Calendar bs_end event notification scheduled to happen in %ld ms\n", devstate_sched_end);
}
if (changed) {
@@ -1388,15 +1394,17 @@
struct timespec ts = {0,};
int res, wait;
+ ast_mutex_lock(&refreshlock);
+
if ((wait = ast_sched_wait(sched)) < 0) {
wait = 1000;
}
ts.tv_sec = (now.tv_sec + wait / 1000) + 1;
-
- ast_mutex_lock(&refreshlock);
res = ast_cond_timedwait(&refresh_condition, &refreshlock, &ts);
+
ast_mutex_unlock(&refreshlock);
+
ast_sched_runq(sched);
}
More information about the asterisk-commits
mailing list