X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fsession.c;h=de9efd7dd1a6eb1aed902cfe84e3c4543041aa83;hb=2ee54f76ebb2510e313a0ad34d09a23d0d9c23ae;hp=bb0e915f0ee2b6a2135564adcf96e6eacaab51a8;hpb=ca9817524ebe069581ad72f6bca0e9775d61e30c;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index bb0e915..de9efd7 100644 --- a/src/session.c +++ b/src/session.c @@ -395,17 +395,26 @@ int session_set_watch(struct session *s, int what, session_watchfun fun, void *data, struct http_channel *chan) { + int ret; + session_enter(s); if (s->watchlist[what].fun) - return -1; - s->watchlist[what].fun = fun; - s->watchlist[what].data = data; - s->watchlist[what].obs = http_add_observer(chan, &s->watchlist[what], - session_watch_cancel); + ret = -1; + else + { + + s->watchlist[what].fun = fun; + s->watchlist[what].data = data; + s->watchlist[what].obs = http_add_observer(chan, &s->watchlist[what], + session_watch_cancel); + ret = 0; + } + session_leave(s); return 0; } void session_alert_watch(struct session *s, int what) { + session_enter(s); if (s->watchlist[what].fun) { /* our watch is no longer associated with http_channel */ @@ -422,8 +431,11 @@ void session_alert_watch(struct session *s, int what) s->watchlist[what].data = 0; s->watchlist[what].obs = 0; + session_leave(s); fun(data); } + else + session_leave(s); } //callback for grep_databases