diff --git a/src/seq/seq_ca.c b/src/seq/seq_ca.c index 1ffccc84fd4a062202ab146e209cc96dd4750a65..29b1c696ce16479386d67cf9b862185b9eccc3db 100644 --- a/src/seq/seq_ca.c +++ b/src/seq/seq_ca.c @@ -305,21 +305,23 @@ static void proc_db_events( Set the dirty flag only if this was a monitor event. */ ss_write_buffer(ch, val, &meta, evtype == pvEventMonitor); } + } + + epicsMutexMustLock(sp->programLock); - /* Signal completion */ - if (ss) + /* Signal completion */ + if (ss) + { + switch (evtype) { - switch (evtype) - { - case pvEventGet: - epicsEventSignal(ss->getSemId[chNum(ch)]); - break; - case pvEventPut: - epicsEventSignal(ss->putSemId[chNum(ch)]); - break; - default: - break; - } + case pvEventGet: + epicsEventSignal(ss->getSemId[chNum(ch)]); + break; + case pvEventPut: + epicsEventSignal(ss->putSemId[chNum(ch)]); + break; + default: + break; } } @@ -329,6 +331,8 @@ static void proc_db_events( /* Wake up each state set that uses this channel in an event */ ss_wakeup(sp, ch->eventNum); + + epicsMutexUnlock(sp->programLock); } /* Disconnect all database channels */