Remove garbage channelIds
authorSunwook Bae <sunwook45.bae@samsung.com>
Sat, 13 Apr 2013 05:31:47 +0000 (14:31 +0900)
committerSunwook Bae <sunwook45.bae@samsung.com>
Sat, 13 Apr 2013 05:52:07 +0000 (14:52 +0900)
Change-Id: Iec924b4a959e06bfee8fea97db82864dad05e227
Signed-off-by: Sunwook Bae <sunwook45.bae@samsung.com>
src/FIo_ChannelService.cpp
src/FIo_MessagePortService.cpp

index cb1f9f1..bb1e7bc 100644 (file)
@@ -92,10 +92,16 @@ _ChannelService::RegisterChannel(const String& channelId, int clientId, unsigned
        result r = E_SUCCESS;
        _ChannelInfo* pChannelInfo = null;
 
-       SysLog(NID_IO, "Register a channel : %ls.", channelId.GetPointer());
+       SysLog(NID_IO, "Register a channel : %ls", channelId.GetPointer());
 
        r = __channels.GetValue(channelId, pChannelInfo);
-       SysTryReturnResult(NID_IO, pChannelInfo == null, E_SYSTEM,  "Channel has already been registered.");
+       if (pChannelInfo != null)
+       {
+               SysTryReturnResult(NID_IO, pChannelInfo->clientId != clientId, E_SYSTEM,  "Channel has already been registered.");
+
+               SysLog(NID_IO, "Remove garbage values : %ls", channelId.GetPointer());
+               __channels.Remove(channelId);
+       }
 
        pChannelInfo = new (std::nothrow) _ChannelInfo;
        SysTryReturnResult(NID_IO, pChannelInfo != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
@@ -119,7 +125,13 @@ _ChannelService::RegisterChannel(const String& channelId, int clientId, void* pG
        SysLog(NID_IO, "Register a channel : [%ls]", channelId.GetPointer());
 
        r = __channels.GetValue(channelId, pChannelInfo);
-       SysTryReturnResult(NID_IO, pChannelInfo == null, E_SYSTEM, "Channel has already been registered.");
+       if (pChannelInfo != null)
+       {
+               SysTryReturnResult(NID_IO, pChannelInfo->clientId != clientId, E_SYSTEM,  "Channel has already been registered.");
+
+               SysLog(NID_IO, "Remove garbage values : %ls", channelId.GetPointer());
+               __channels.Remove(channelId);
+       }
 
        pChannelInfo = new (std::nothrow) _ChannelInfo;
        SysTryReturnResult(NID_IO, pChannelInfo != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
index 9649a05..49ae069 100644 (file)
@@ -87,26 +87,34 @@ _MessagePortService::RegisterMessagePort(int clientId, const BundleBuffer& buffe
 
        SysLog(NID_IO, "Register a message port: [%ls], client id = %d", key.GetPointer(), clientId);
 
-       bool out = false;
-
+       result r = E_SUCCESS;
+       int value = -1;
        if (trusted.Equals(L"TRUE", false))
        {
-               __pTrustedPorts->ContainsKey(key, out);
-       }
-       else
-       {
-               __pPorts->ContainsKey(key, out);
-       }
+               r = __pTrustedPorts->GetValue(key, value);
+               if (r == E_SUCCESS)
+               {
+                       SysTryReturn(NID_IO, value != clientId, MESSAGEPORT_ERROR_IO_ERROR, E_SYSTEM,
+                                       "[E_SYSTEM] The local message port (%ls) has already registered", key.GetPointer());
 
-       SysTryReturn(NID_IO, !out, MESSAGEPORT_ERROR_IO_ERROR, E_SYSTEM, 
-                       "[E_SYSTEM] The local message port (%ls) has already registered", key.GetPointer());
+                       SysLog(NID_IO, "Remove garbage values : %ls", key.GetPointer());
+                       __pTrustedPorts->Remove(key);
+               }
 
-       if (trusted.Equals(L"TRUE", false))
-       {
                __pTrustedPorts->Add(key, clientId);
        }
        else
        {
+               r = __pPorts->GetValue(key, value);
+               if (r == E_SUCCESS)
+               {
+                       SysTryReturn(NID_IO, value != clientId, MESSAGEPORT_ERROR_IO_ERROR, E_SYSTEM,
+                                       "[E_SYSTEM] The local message port (%ls) has already registered", key.GetPointer());
+
+                       SysLog(NID_IO, "Remove garbage values : %ls", key.GetPointer());
+                       __pPorts->Remove(key);
+               }
+
                __pPorts->Add(key, clientId);
        }