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.");
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.");
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);
}