Fix for lp:1091401 Michael Davidsaver observed a race when attempting to reload the access security file from a subroutine record (iocStats includes such a record). The symptom is a crash which occurs when using the command line caput utility to process this subroutine. If caput is invoked with -c, or if a longer running CA client is used, no crash is observed (so far). === modified file src/rsrv/camessage.c --- src/rsrv/camessage.c 2010-11-01 21:01:04 +0000 +++ src/rsrv/camessage.c 2012-12-18 00:23:53 +0000 @@ -1992,6 +1992,15 @@ cas_commit_msg ( client, 0u ); SEND_UNLOCK(client); + /* + * remove from access control list + */ + status = asRemoveClient(&pciu->asClientPVT); + if(status != 0 && status != S_asLib_asNotActive){ + errMessage(status, RECORD_NAME(&pciu->addr)); + return RSRV_ERROR; + } + epicsMutexMustLock ( client->chanListLock ); if ( pciu->state == rsrvCS_inService || pciu->state == rsrvCS_pendConnectResp ) { @@ -2011,15 +2020,6 @@ } epicsMutexUnlock( client->chanListLock ); - /* - * remove from access control list - */ - status = asRemoveClient(&pciu->asClientPVT); - if(status != 0 && status != S_asLib_asNotActive){ - errMessage(status, RECORD_NAME(&pciu->addr)); - return RSRV_ERROR; - } - LOCK_CLIENTQ; status = bucketRemoveItemUnsignedId (pCaBucket, &pciu->sid); if(status != S_bucket_success){