daemon: Allow a new monitor event to cancel one already in progress
authorMartin Schwenke <martin@meltin.net>
Tue, 14 Jul 2015 03:43:14 +0000 (13:43 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Thu, 16 Jul 2015 04:37:17 +0000 (14:37 +1000)
Before commit cbffbb7c2f406fc1d8ebad3c531cc2757232690e this was
possible and some users depend on this behaviour.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
(Imported from commit 182ebc07289c776ca104e648911a53209bcdaf00)

server/eventscript.c

index 77f2cd5705ef98dbee5ec7e7521033ffd9ff85d8..b08a797fa993a8e3788200d8e21fb7042be16736 100644 (file)
@@ -711,8 +711,12 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
                }
        }
 
-       /* Do not run new monitor events if some event is already running */
-       if (call == CTDB_EVENT_MONITOR && ctdb->active_events > 0) {
+       /* Do not run new monitor events if some event is already
+        * running, unless the running event is a monitor event, in
+        * which case running a new one should cancel the old one. */
+       if (call == CTDB_EVENT_MONITOR &&
+           ctdb->active_events > 0 &&
+           ctdb->current_monitor == NULL) {
                if (callback != NULL) {
                        callback(ctdb, -ECANCELED, private_data);
                }