static void* in_discoveryClientWriterMonitor( void* arg) { c_bool result, sendTo, more; v_message message; c_ulong sequenceNumber, priority; v_gid sender, receiver; c_time sendBefore; v_networkReaderEntry entry; os_time sleepTime; in_writer writer; os_boolean proceed = TRUE; v_networkReaderWaitResult nrwr; if(vclientQueue){ sleepTime.tv_sec = 0; sleepTime.tv_nsec = 50 * 1000 * 1000; while(!terminate && proceed){ nrwr = v_networkReaderWait(vclientReader, queueId, &vclientQueue); if((nrwr & V_WAITRESULT_MSGWAITING) == V_WAITRESULT_MSGWAITING){ more = TRUE; while(more){ result = v_networkQueueTakeFirst( vclientQueue, &message, &entry, &sequenceNumber, &sender, &sendTo, &receiver, &sendBefore, &priority, &more); if(result){ os_mutexLock (&gluelock); writer = in_writerLookup(&sender); if(writer){ if(v_nodeState(message) == L_WRITE){ proceed = in_writerWrite(writer, message); } else if(v_nodeState(message) == L_DISPOSED){ proceed = in_writerDispose(writer, message); } else if(v_nodeState(message) == L_UNREGISTER){ proceed = in_writerUnregister(writer, message); } } os_mutexUnlock (&gluelock); } } } else if((nrwr & V_WAITRESULT_TRIGGERED) == V_WAITRESULT_TRIGGERED){ in_printf(IN_LEVEL_FINER, "clientReader triggered...\n"); proceed = FALSE; } } } return NULL; }
static void* in_discoveryClientWriterMonitor( UNUSED_ARG (void* arg)) { c_bool result, sendTo, more; v_message message; c_ulong sequenceNumber, priority; v_gid sender, receiver; c_time sendBefore; v_networkReaderEntry entry; os_time sleepTime; in_writer writer; os_boolean proceed = TRUE; v_networkReaderWaitResult nrwr; struct nn_xpack *xp; xp = nn_xpack_new (); if(vclientQueue){ sleepTime.tv_sec = 0; sleepTime.tv_nsec = 50 * 1000 * 1000; while(!terminate && proceed){ nrwr = v_networkReaderWait(vclientReader, queueId, &vclientQueue); if((nrwr & V_WAITRESULT_MSGWAITING) == V_WAITRESULT_MSGWAITING){ more = TRUE; while(more){ result = v_networkQueueTakeFirst( vclientQueue, &message, &entry, &sequenceNumber, &sender, &sendTo, &receiver, &sendBefore, &priority, &more); if(result){ os_mutexLock (&gluelock); writer = in_writerLookup(&sender); if (writer) proceed = in_writerWrite(xp, writer, message); os_mutexUnlock (&gluelock); c_free (message); } } nn_xpack_send (xp); } else if((nrwr & V_WAITRESULT_TRIGGERED) == V_WAITRESULT_TRIGGERED){ nn_log (LC_TRACE, "clientReader triggered...\n"); proceed = FALSE; } } } nn_xpack_free (xp); return NULL; }