[ITC][webrtc][non-ACR] Use userdata of callback to remove global variable 95/268995/2
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 6 Jan 2022 05:25:06 +0000 (14:25 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 6 Jan 2022 13:30:19 +0000 (22:30 +0900)
Change-Id: If789aa4d8ca7e765952baf9ff3e79468fd7b1745
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
src/itc/webrtc/ITs-webrtc-common.h
src/itc/webrtc/ITs-webrtc.c

index 76c04758b85881eacb414bcaba66a01049440ee4..63dfb45ac4350ac43cd66a85d3728727777cafa3 100755 (executable)
@@ -66,10 +66,14 @@ do {\
                return 1;\
        }\
 }
+
+typedef struct _callback_data {
+       GMainLoop *mainloop;
+       bool is_invoked;
+} callback_data;
+
 bool g_bWebRTCCreation;
 webrtc_h g_hWebRtcHandle;
-static GMainLoop *g_pMainLoop = NULL;
-bool g_bCallbackCalled;
 gboolean Timeout(gpointer data);
 char* WebRtcGetError(int nErrorType);
 /** @} */
index f7d614ddbe7163a5b493f1ba024c1af2187d03ce..141d199baa58de59acb715f4feded856f3faec57 100755 (executable)
@@ -65,9 +65,14 @@ static void destroyWindow()
 */
 static void webrtcSessionDescriptionCreatedCB(webrtc_h webrtc, const char *description, void *user_data)
 {
-       g_bCallbackCalled = true;
+       callback_data *cb_data = (callback_data *)user_data;
+
        FPRINTF("[Line : %d][%s] Callback webrtcSessionDescriptionCreatedCB called\\n", __LINE__, API_NAMESPACE);
-       QUIT_LOOP(g_pMainLoop);
+
+       if (!cb_data)
+               return;
+       cb_data->is_invoked = true;
+       QUIT_LOOP(cb_data->mainloop);
 }
 
 /**
@@ -97,9 +102,14 @@ static void webrtcIceCandidateCB(webrtc_h webrtc, const char *candidate, void *u
 */
 static void webrtcStateChangedCB(webrtc_h webrtc, webrtc_state_e previous, webrtc_state_e current, void *user_data)
 {
-       g_bCallbackCalled = true;
+       callback_data *cb_data = (callback_data *)user_data;
+
        FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB called\\n", __LINE__, API_NAMESPACE);
-       QUIT_LOOP(g_pMainLoop);
+
+       if (!cb_data)
+               return;
+       cb_data->is_invoked = true;
+       QUIT_LOOP(cb_data->mainloop);
 }
 
 /**
@@ -109,9 +119,14 @@ static void webrtcStateChangedCB(webrtc_h webrtc, webrtc_state_e previous, webrt
 */
 static void webrtcSignalingStateChangeCB(webrtc_h webrtc, webrtc_signaling_state_e state, void *user_data)
 {
-       g_bCallbackCalled = true;
+       callback_data *cb_data = (callback_data *)user_data;
+
        FPRINTF("[Line : %d][%s] Callback webrtcSignalingStateChangeCB called\\n", __LINE__, API_NAMESPACE);
-       QUIT_LOOP(g_pMainLoop);
+
+       if (!cb_data)
+               return;
+       cb_data->is_invoked = true;
+       QUIT_LOOP(cb_data->mainloop);
 }
 
 /**
@@ -234,21 +249,20 @@ int ITc_webrtc_create_destroy_p(void)
 int ITc_webrtc_start_stop_p(void)
 {
        START_TEST;
-
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
-               FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked for %s\\n", __LINE__, API_NAMESPACE, "webrtc_set_state_changed_cb");
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
+               FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
 
@@ -898,7 +912,7 @@ int ITc_media_webrtc_create_offer_answer_p(void)
        unsigned int nId;
        char *pszOffer, *pszAnswer;
        webrtc_h hLocalWebRtcHandle,hWebRtcHandle;
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_create(&hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_create", WebRtcGetError(nRet));
@@ -910,18 +924,18 @@ int ITc_media_webrtc_create_offer_answer_p(void)
        nRet = webrtc_set_ice_candidate_cb(hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
-       g_bCallbackCalled = false;
+       cb_data.is_invoked = false;
 
        nRet = webrtc_create_offer(hWebRtcHandle, NULL, &pszOffer);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_create_offer", WebRtcGetError(nRet));
@@ -933,27 +947,27 @@ int ITc_media_webrtc_create_offer_answer_p(void)
        nRet = webrtc_set_ice_candidate_cb(hLocalWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(hLocalWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(hLocalWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_signaling_state_change_cb(hLocalWebRtcHandle, webrtcSignalingStateChangeCB, NULL);
+       nRet = webrtc_set_signaling_state_change_cb(hLocalWebRtcHandle, webrtcSignalingStateChangeCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_signaling_state_change_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(hLocalWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
-       g_bCallbackCalled = false;
+       cb_data.is_invoked = false;
 
        nRet = webrtc_set_remote_description(hLocalWebRtcHandle, pszOffer);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_remote_description", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcSignalingStateChangeCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1002,7 +1016,7 @@ int ITc_media_webrtc_set_local_description_p(void)
        START_TEST;
        unsigned int nId;
        char *pszOffer;
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST, &nId);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_add_media_source", WebRtcGetError(nRet));
@@ -1010,14 +1024,14 @@ int ITc_media_webrtc_set_local_description_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1055,10 +1069,10 @@ int ITc_media_webrtc_set_local_description_p(void)
 int ITc_media_webrtc_set_remote_description_p(void)
 {
        START_TEST;
-       g_bCallbackCalled = false;
        webrtc_h hLocalWebRtcHandle;
        unsigned int nId;
        char *pszOffer;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST, &nId);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_add_media_source", WebRtcGetError(nRet));
@@ -1066,36 +1080,36 @@ int ITc_media_webrtc_set_remote_description_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
+       cb_data.is_invoked = false;
 
        nRet = webrtc_create_offer(g_hWebRtcHandle, NULL, &pszOffer);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_create_offer", WebRtcGetError(nRet));
 
-       g_bCallbackCalled = false;
        nRet = webrtc_create(&hLocalWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_create", WebRtcGetError(nRet));
 
        nRet = webrtc_set_ice_candidate_cb(hLocalWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(hLocalWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(hLocalWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(hLocalWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1136,19 +1150,19 @@ int ITc_media_webrtc_set_remote_description_p(void)
 int ITc_media_webrtc_add_ice_candidate_p(void)
 {
        START_TEST;
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1355,7 +1369,7 @@ int ITc_media_webrtc_create_offer_async_p(void)
 {
        START_TEST;
        unsigned int nId;
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_CAMERA, &nId);
        if (nRet == WEBRTC_ERROR_NOT_SUPPORTED) {
@@ -1367,23 +1381,24 @@ int ITc_media_webrtc_create_offer_async_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
+       cb_data.is_invoked = false;
 
-       nRet = webrtc_create_offer_async(g_hWebRtcHandle, NULL, webrtcSessionDescriptionCreatedCB, NULL);
+       nRet = webrtc_create_offer_async(g_hWebRtcHandle, NULL, webrtcSessionDescriptionCreatedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_create_offer_async", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcSessionDescriptionCreatedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1416,7 +1431,7 @@ int ITc_media_webrtc_create_answer_async_p(void)
        unsigned int nId;
        char *pszOffer;
        webrtc_h hLocalWebRtcHandle;
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST, &nId);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_add_media_source", WebRtcGetError(nRet));
@@ -1424,18 +1439,18 @@ int ITc_media_webrtc_create_answer_async_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
-       g_bCallbackCalled = false;
+       cb_data.is_invoked = false;
 
        nRet = webrtc_create_offer(g_hWebRtcHandle, NULL, &pszOffer);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_create_offer", WebRtcGetError(nRet));
@@ -1446,40 +1461,41 @@ int ITc_media_webrtc_create_answer_async_p(void)
        nRet = webrtc_set_ice_candidate_cb(hLocalWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(hLocalWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(hLocalWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_signaling_state_change_cb(hLocalWebRtcHandle, webrtcSignalingStateChangeCB, NULL);
+       nRet = webrtc_set_signaling_state_change_cb(hLocalWebRtcHandle, webrtcSignalingStateChangeCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_signaling_state_change_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_start(hLocalWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
-       g_bCallbackCalled = false;
+       cb_data.is_invoked = false;
 
        nRet = webrtc_set_remote_description(hLocalWebRtcHandle, pszOffer);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_remote_description", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcSignalingStateChangeCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
-       g_bCallbackCalled = false;
+       cb_data.is_invoked = false;
 
-       nRet = webrtc_create_answer_async(hLocalWebRtcHandle, NULL, webrtcSessionDescriptionCreatedCB, NULL);
+       nRet = webrtc_create_answer_async(hLocalWebRtcHandle, NULL, webrtcSessionDescriptionCreatedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_create_answer_async", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcSessionDescriptionCreatedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
+       cb_data.is_invoked = false;
 
        FREE_MEMORY(pszOffer);
 
@@ -1516,7 +1532,7 @@ int ITc_media_webrtc_media_source_set_audio_loopback_p(void)
        START_TEST;
        unsigned int nId;
        sound_stream_info_h hStreamInfo;
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        createWindow();
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST, &nId);
@@ -1525,7 +1541,7 @@ int ITc_media_webrtc_media_source_set_audio_loopback_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = sound_manager_create_stream_information(SOUND_STREAM_TYPE_MEDIA, NULL, NULL, &hStreamInfo);
@@ -1537,8 +1553,8 @@ int ITc_media_webrtc_media_source_set_audio_loopback_p(void)
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1573,7 +1589,7 @@ int ITc_media_webrtc_media_source_set_video_loopback_p(void)
 {
        START_TEST;
        unsigned int nId;
-       g_bCallbackCalled = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        createWindow();
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST, &nId);
@@ -1582,7 +1598,7 @@ int ITc_media_webrtc_media_source_set_video_loopback_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_media_source_set_video_loopback(g_hWebRtcHandle, nId, WEBRTC_DISPLAY_TYPE_OVERLAY, g_win, NULL);
@@ -1591,8 +1607,8 @@ int ITc_media_webrtc_media_source_set_video_loopback_p(void)
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1624,8 +1640,8 @@ int ITc_media_webrtc_set_get_display_mode_p(void)
 {
        START_TEST;
        unsigned int nId,nTrackId;
-       g_bCallbackCalled = false;
        webrtc_display_mode_e eMode;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        createWindow();
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST, &nId);
@@ -1634,7 +1650,7 @@ int ITc_media_webrtc_set_get_display_mode_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        nRet = webrtc_media_source_set_video_loopback(g_hWebRtcHandle, nId, WEBRTC_DISPLAY_TYPE_OVERLAY, g_win, &nTrackId);
@@ -1643,8 +1659,8 @@ int ITc_media_webrtc_set_get_display_mode_p(void)
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
@@ -1682,8 +1698,8 @@ int ITc_media_webrtc_set_get_display_visible_p(void)
 {
        START_TEST;
        unsigned int nId,nTrackId;
-       g_bCallbackCalled = false;
        bool bGetVisible, bSetVisible = false;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_CAMERA, &nId);
        if (nRet == WEBRTC_ERROR_NOT_SUPPORTED) {
@@ -1695,7 +1711,7 @@ int ITc_media_webrtc_set_get_display_visible_p(void)
        nRet = webrtc_set_ice_candidate_cb(g_hWebRtcHandle, webrtcIceCandidateCB, NULL);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_ice_candidate_cb", WebRtcGetError(nRet));
 
-       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, NULL);
+       nRet = webrtc_set_state_changed_cb(g_hWebRtcHandle, webrtcStateChangedCB, &cb_data);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_set_state_changed_cb", WebRtcGetError(nRet));
 
        createWindow();
@@ -1706,8 +1722,8 @@ int ITc_media_webrtc_set_get_display_visible_p(void)
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP(g_pMainLoop, g_bCallbackCalled);
-       if (!g_bCallbackCalled) {
+       RUN_POLLING_LOOP(cb_data.mainloop, cb_data.is_invoked);
+       if (!cb_data.is_invoked) {
                FPRINTF("[Line : %d][%s] Callback webrtcStateChangedCB not invoked\\n", __LINE__, API_NAMESPACE);
                return 1;
        }