aboutsummaryrefslogtreecommitdiff
path: root/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2016-05-17 13:50:43 -0700
committerdavidevinavil <davidevinavil@gmail.com>2017-01-21 18:20:40 +0100
commit9b2f586aa30c3802a7663a25cf98eb8f06309d2f (patch)
treedf43e5bb7aeb9957b31ebdfbdce45baec7744f20 /data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp
parent11e7b3c6aa71b15800f7cf989ac71bbd85a68e51 (diff)
z2_plus: Update IPA connection manager to 1.0 branch
Change-Id: I20555a4bd9981f652f71360bdb7d83e822fad883
Diffstat (limited to 'data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp')
-rw-r--r--data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp66
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)
{