diff options
Diffstat (limited to 'data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp')
-rw-r--r-- | data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp | 66 |
1 files changed, 53 insertions, 13 deletions
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp index 7e48546..a17fb08 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2013, The Linux Foundation. All rights reserved. +Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -40,24 +40,42 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <string.h> #include "IPACM_CmdQueue.h" #include "IPACM_Log.h" +#include "IPACM_Iface.h" pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond_var = PTHREAD_COND_INITIALIZER; -MessageQueue* MessageQueue::inst = NULL; -MessageQueue* MessageQueue::getInstance() +MessageQueue* MessageQueue::inst_internal = NULL; +MessageQueue* MessageQueue::inst_external = NULL; + +MessageQueue* MessageQueue::getInstanceInternal() { - if(inst == NULL) + if(inst_internal == NULL) { - inst = new MessageQueue(); - if(inst == NULL) + inst_internal = new MessageQueue(); + if(inst_internal == NULL) { - IPACMERR("unable to create Message Queue instance\n"); + IPACMERR("unable to create internal Message Queue instance\n"); return NULL; } } - return inst; + return inst_internal; +} + +MessageQueue* MessageQueue::getInstanceExternal() +{ + if(inst_external == NULL) + { + inst_external = new MessageQueue(); + if(inst_external == NULL) + { + IPACMERR("unable to create external Message Queue instance\n"); + return NULL; + } + } + + return inst_external; } void MessageQueue::enqueue(Message *item) @@ -101,14 +119,22 @@ Message* MessageQueue::dequeue(void) void* MessageQueue::Process(void *param) { - MessageQueue *MsgQueue = NULL; + MessageQueue *MsgQueueInternal = NULL; + MessageQueue *MsgQueueExternal = NULL; Message *item = NULL; IPACMDBG("MessageQueue::Process()\n"); - MsgQueue = MessageQueue::getInstance(); - if(MsgQueue == NULL) + MsgQueueInternal = MessageQueue::getInstanceInternal(); + if(MsgQueueInternal == NULL) + { + IPACMERR("unable to start internal cmd queue process\n"); + return NULL; + } + + MsgQueueExternal = MessageQueue::getInstanceExternal(); + if(MsgQueueExternal == NULL) { - IPACMERR("unable to start cmd queue process\n"); + IPACMERR("unable to start external cmd queue process\n"); return NULL; } @@ -120,7 +146,21 @@ void* MessageQueue::Process(void *param) return NULL; } - item = MsgQueue->dequeue(); + item = MsgQueueInternal->dequeue(); + if(item == NULL) + { + item = MsgQueueExternal->dequeue(); + if(item) + { + IPACMDBG("Get event %s from external queue.\n", + IPACM_Iface::ipacmcfg->getEventName(item->evt.data.event)); + } + } + else + { + IPACMDBG("Get event %s from internal queue.\n", + IPACM_Iface::ipacmcfg->getEventName(item->evt.data.event)); + } if(item == NULL) { |