Ryan, it's test saMsgDispatch/2-3. Calls look like: [DEBUG]: saMsgQueueOpenAsync [DEBUG]: saMsgQueueUnlink [DEBUG]: saMsgQueueClose [DEBUG]: saMsgQueueFinalize
So first is close. That call will lead to call of finalize and AFTER that close continues and tries to delete item from list again. Sending proposed patch ver2, which may be better (no special variable, just list_init after del). Regards, Honza Ryan O'Hara wrote: > How did multiple list_del occur? Did you call saMsgQueueClose followed > by saMsgFinalize? > > I'm not sure this is the best way to deal with this. > > On Tue, May 19, 2009 at 03:43:09PM +0200, Jan Friesse wrote: >> Hi, >> included patch solves multiple list_del in saMsgQueueClose, which leads >> to segfault. >> >> Regards, >> Honza > >> diff --git a/trunk/lib/msg.c b/trunk/lib/msg.c >> index 1c20119..689ffbc 100644 >> --- a/trunk/lib/msg.c >> +++ b/trunk/lib/msg.c >> @@ -78,6 +78,7 @@ struct queueInstance { >> SaMsgQueueHandleT queue_handle; >> SaMsgQueueOpenFlagsT open_flags; >> SaMsgQueueCreationAttributesT create_attrs; >> + int finalize; >> struct list_head list; >> }; >> >> @@ -96,6 +97,8 @@ static struct saVersionDatabase msgVersionDatabase = { >> >> static void queueInstanceFinalize (struct queueInstance *queueInstance) >> { >> + queueInstance->finalize = 1; >> + >> list_del (&queueInstance->list); >> >> hdb_handle_destroy (&queueHandleDatabase, queueInstance->queue_handle); >> @@ -713,10 +719,11 @@ saMsgQueueClose ( >> goto error_put; /* ! */ >> } >> >> - list_del (&queueInstance->list); >> + if (!queueInstance->finalize) { >> + queueInstanceFinalize (queueInstance); >> + } >> >> hdb_handle_put (&queueHandleDatabase, queueHandle); >> - hdb_handle_destroy (&queueHandleDatabase, queueHandle); >> >> return (error); >> > >> _______________________________________________ >> Openais mailing list >> Openais@lists.linux-foundation.org >> https://lists.linux-foundation.org/mailman/listinfo/openais
diff --git a/trunk/lib/msg.c b/trunk/lib/msg.c index 1c20119..e014d23 100644 --- a/trunk/lib/msg.c +++ b/trunk/lib/msg.c @@ -97,6 +97,7 @@ static struct saVersionDatabase msgVersionDatabase = { static void queueInstanceFinalize (struct queueInstance *queueInstance) { list_del (&queueInstance->list); + list_init (&queueInstance->list); hdb_handle_destroy (&queueHandleDatabase, queueInstance->queue_handle); @@ -714,6 +715,7 @@ saMsgQueueClose ( } list_del (&queueInstance->list); + list_init (&queueInstance->list); hdb_handle_put (&queueHandleDatabase, queueHandle); hdb_handle_destroy (&queueHandleDatabase, queueHandle);
_______________________________________________ Openais mailing list Openais@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/openais