Added function hook for the MessageQ_put method
[ipc/ipcdev.git] / linux / src / api / MessageQ.c
index 7a20a7821aa629b0af73ccc8283ad38e6a3744a7..2fc61e32a10808d1d848d85e94eb52eb008f6928 100644 (file)
@@ -112,6 +112,7 @@ typedef struct MessageQ_ModuleObject {
     int                       seqNum;
     IMessageQTransport_Handle transports[MultiProc_MAXPROCESSORS][2];
     INetworkTransport_Handle  transInst[MessageQ_MAXTRANSPORTS];
     int                       seqNum;
     IMessageQTransport_Handle transports[MultiProc_MAXPROCESSORS][2];
     INetworkTransport_Handle  transInst[MessageQ_MAXTRANSPORTS];
+    MessageQ_PutHookFxn       putHookFxn;
 } MessageQ_ModuleObject;
 
 typedef struct MessageQ_CIRCLEQ_ENTRY {
 } MessageQ_ModuleObject;
 
 typedef struct MessageQ_CIRCLEQ_ENTRY {
@@ -142,6 +143,7 @@ static MessageQ_ModuleObject MessageQ_state =
 {
     .refCount   = 0,
     .nameServer = NULL,
 {
     .refCount   = 0,
     .nameServer = NULL,
+    .putHookFxn = NULL
 };
 
 /*!
 };
 
 /*!
@@ -670,6 +672,11 @@ Int MessageQ_put(MessageQ_QueueId queueId, MessageQ_Msg msg)
     msg->dstId     = queueIndex;
     msg->dstProc   = dstProcId;
 
     msg->dstId     = queueIndex;
     msg->dstProc   = dstProcId;
 
+    /* invoke put hook function after addressing the message */
+    if (MessageQ_module->putHookFxn != NULL) {
+        MessageQ_module->putHookFxn(queueId, msg);
+    }
+
     if (dstProcId != MultiProc_self()) {
         tid = MessageQ_getTransportId(msg);
         if (tid == 0) {
     if (dstProcId != MultiProc_self()) {
         tid = MessageQ_getTransportId(msg);
         if (tid == 0) {