* @see\r
* @since 0.1\r
*/\r
-void *client_async_cb_handler(void *thread_arg)\r
-{\r
+void *client_async_cb_handler(void *thread_arg) {\r
drm_client_cb_data_s callinfo;\r
int retval = 0, result = 0;\r
- memset(&callinfo, 0x00, sizeof(drm_client_cb_data_s));\r
\r
/* This Async thread will be running for the entire process alive time\r
* to handle all the async related operations sent from the server\r
*/\r
- while(1)\r
- {\r
- /* waiting for data on async socket */\r
- if ((retval = read(async_sockfd, &callinfo, sizeof(drm_client_cb_data_s))) < 0) {\r
- DRM_CLIENT_EXCEPTION(" Async call_back read error!!, retval = %d, error = %s",\r
- retval, strerror(errno));\r
- result = DRM_RETURN_COMMUNICATION_ERROR;\r
+ while (1) {\r
+ memset(&callinfo, 0x00, sizeof(drm_client_cb_data_s));\r
+ retval = read(async_sockfd, &callinfo, sizeof(drm_client_cb_data_s));\r
+ if (0 == retval) {\r
+ DRM_CLIENT_LOG("Read returns 0!, retval = %d", retval);\r
+ DRM_CLIENT_LOG("Server end closed!!!!");\r
+ /* Since server end closes\r
+ * async socket creation needs to be done again\r
+ */\r
goto ErrorExit;\r
+ } else if (retval < 0 || retval < sizeof(drm_client_cb_data_s)) {\r
+ DRM_CLIENT_EXCEPTION(\r
+ " Async call_back read error!!, retval = %d, error = %s",\r
+ retval, strerror(errno));\r
}\r
- DRM_CLIENT_LOG("Calling application call back function from client");\r
-\r
- /* Search the client cb info from the received client_id and call corresponding handler */\r
- __search_client_info_cb(&callinfo);\r
- }\r
- ErrorExit:\r
- if(-1 != async_sockfd)\r
- close(async_sockfd);\r
- return NULL;\r
+\r
+ DRM_CLIENT_LOG(\r
+ "Calling application call back function from client, retval = %d",\r
+ retval);\r
+ /* Search the client cb info from the received client_id and call corresponding handler */\r
+ __search_client_info_cb(&callinfo);\r
+ }\r
+\r
+ErrorExit:\r
+ pthread_mutex_lock(&async_mutex);\r
+ if (-1 != async_sockfd)\r
+ close(async_sockfd);\r
+ async_sockfd = -1;\r
+ pthread_mutex_unlock(&async_mutex);\r
+ return NULL;\r
}\r
\r
\r