From 6876f560fb1e25e6190f84343bb4289f7b645699 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 17 Feb 2010 17:05:03 +0100 Subject: [PATCH] Protect session_watch --- src/session.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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 -- 1.7.10.4