In some instances it's possible for cpg_dispatch() to return CS_ERR_LIBRARY if cpg_finalise() is called from the callback routine. The error isn't a problem but it can cause calling applications to log an error where there is no actual problem (this has been seen in cmirrord)

The trouble is caused because control_buffer->ipc_closed is (correctly) set in this situation which causes ipc_sem_wait() to return CS_ERR_LIBRARY.

My solution is to check for control_buffer->ipc_closed in coroipcc_put() and instead of simply passing CS_ERR_LIBRARY up the stack, change it to a benign CS_OK as it is quite reasonable behaviour when shutting down.

Signed-Off-By: Christine Caulfield <[email protected]>

diff --git a/lib/coroipcc.c b/lib/coroipcc.c
index 774e835..5aff6e0 100644
--- a/lib/coroipcc.c
+++ b/lib/coroipcc.c
@@ -957,6 +957,13 @@ coroipcc_dispatch_put (hdb_handle_t handle)
 retry_ipc_sem_wait:
        res = ipc_sem_wait (ipc_instance->control_buffer, SEMAPHORE_DISPATCH, 
ipc_instance->fd);
        if (res != CS_OK) {
+               /*
+                * IPC was closed earlier in dispatch, return OK
+                */
+               if (ipc_instance->control_buffer->ipc_closed) {
+                       res = CS_OK;
+                       goto error_exit;
+               }
                if (res == CS_ERR_TRY_AGAIN) {
                        priv_change_send (ipc_instance);
                        goto retry_ipc_sem_wait;
_______________________________________________
discuss mailing list
[email protected]
http://lists.corosync.org/mailman/listinfo/discuss

Reply via email to