RemoteMessagePort::SendMessage() returns E_SYSTEM when the socket receiver buffer...
[platform/framework/native/appfw.git] / src / io / FIo_MessagePortProxy.cpp
index b3f6b30..1252927 100644 (file)
@@ -27,6 +27,8 @@
 #include <message-port.h>
 
 #include <FBaseSysLog.h>
+#include <FBaseByteBuffer.h>
+
 #include <FBase_StringConverter.h>
 #include <FApp_AppInfo.h>
 
@@ -43,7 +45,7 @@ using namespace Tizen::Base::Runtime;
 namespace Tizen { namespace Io
 {
 
-static const int MAX_MESSAGE_SIZE = 16 * 1024;
+//static const int MAX_MESSAGE_SIZE = 16 * 1024;
 
 static void
 ConvertBundleToMap(const char *pKey, const int type, const bundle_keyval_t *pVal, void *pData)
@@ -344,6 +346,11 @@ _MessagePortProxy::SendMessage(const AppId& remoteAppId, const String& remotePor
 
        if (ret < 0)
        {
+               if (ret == MESSAGEPORT_ERROR_RESOURCE_UNAVAILABLE)
+               {
+                       SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] The socket receiver queue of remote port is temporarily full.");
+               }
+
                result r = ConvertToResult(ret);
 
                SysTryReturnResult(NID_IO, r != E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "The remote message port is not found.");
@@ -401,6 +408,11 @@ _MessagePortProxy::SendMessage(const String& localPort, bool isTrustedLocal, con
 
        if (ret < 0)
        {
+               if (ret == MESSAGEPORT_ERROR_RESOURCE_UNAVAILABLE)
+               {
+                       SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] The socket receiver queue of remote port is temporarily full.");
+               }
+
                result r = ConvertToResult(ret);
 
                SysTryReturnResult(NID_IO, r != E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "The remote message port is not found.");
@@ -460,6 +472,9 @@ _MessagePortProxy::ConvertToResult(int error)
                case MESSAGEPORT_ERROR_MAX_EXCEEDED:
                        return E_MAX_EXCEEDED;
 
+               case MESSAGEPORT_ERROR_RESOURCE_UNAVAILABLE:
+                       // fall through
+
                default:
                        return E_SYSTEM;
        }