From dc076e36de276d49ab1e47f6aca60a7e7c93ed84 Mon Sep 17 00:00:00 2001 From: Pawel Wieczorkiewicz Date: Mon, 19 Jan 2015 15:29:28 +0100 Subject: [PATCH] fsm: lock (reference) worker when starting fsm on it --- src/fsm.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fsm.c b/src/fsm.c index 625c02d69..9831b06ed 100644 --- a/src/fsm.c +++ b/src/fsm.c @@ -510,8 +510,7 @@ void ni_ifworker_array_append(ni_ifworker_array_t *array, ni_ifworker_t *w) { array->data = realloc(array->data, (array->count + 1) * sizeof(array->data[0])); - array->data[array->count++] = w; - w->refcount++; + array->data[array->count++] = ni_ifworker_get(w); } int @@ -4097,6 +4096,8 @@ ni_fsm_schedule(ni_fsm_t *fsm) unsigned int prev_state; int rv; + ni_ifworker_get(w); + if (w->pending) continue; @@ -4180,6 +4181,8 @@ ni_fsm_schedule(ni_fsm_t *fsm) ni_ifworker_state_name(prev_state), ni_ifworker_state_name(action->next_state)); } + + ni_ifworker_release(w); } if (!made_progress)