[ITC][webrtc][non-ACR] Use userdata of callback to remove global variable 71/269071/2
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 6 Jan 2022 05:25:06 +0000 (14:25 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 7 Jan 2022 07:25:24 +0000 (16:25 +0900)
Change-Id: If789aa4d8ca7e765952baf9ff3e79468fd7b1745
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
(cherry picked from commit ef78be2956a089352ace66e1bb328b37ab97dee0)

src/itc/webrtc/ITs-webrtc-common.h
src/itc/webrtc/ITs-webrtc.c

index ac16fa9d9fbb0f07161e303201ffa6b63ee0825a..c5c590ca564bfa25d89ff2f2ffd9c4532aa9702b 100755 (executable)
@@ -66,11 +66,15 @@ do {\
                return 1;\
        }\
 }
+
+typedef struct _callback_data {
+       GMainLoop *mainloop;
+       bool is_invoked;
+} callback_data;
+
 bool g_bWebRTCCreation;
 char *g_pszFilePath;
 webrtc_h g_hWebRtcHandle;
-static GMainLoop *g_pMainLoop = NULL;
-bool g_bCallbackCalled;
 gboolean Timeout(gpointer data);
 char* WebRtcGetError(int nErrorType);
 unsigned int GetDataFromFile();
index d852a1d27e1448e53f18ea56e91ec3f765bb2ce6..a7b9cd966571a8d578da64f0f4269635bd50b1e2 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_VIDEOTEST, &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_unset_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_unset_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_unset_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;
        }
@@ -1575,7 +1591,7 @@ int ITc_media_webrtc_media_source_set_unset_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);
@@ -1584,7 +1600,7 @@ int ITc_media_webrtc_media_source_set_unset_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);
@@ -1593,8 +1609,8 @@ int ITc_media_webrtc_media_source_set_unset_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;
        }
@@ -1630,8 +1646,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);
@@ -1640,7 +1656,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);
@@ -1649,8 +1665,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;
        }
@@ -1688,8 +1704,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_VIDEOTEST, &nId);
        if (nRet == WEBRTC_ERROR_NOT_SUPPORTED) {
@@ -1701,7 +1717,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();
@@ -1712,8 +1728,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;
        }
@@ -1823,6 +1839,7 @@ int ITc_webrtc_file_source_set_path_p(void)
 {
        START_TEST;
        unsigned int nId;
+       callback_data cb_data = { .mainloop = NULL, .is_invoked = false };
 
        int nRet = GetDataFromFile();
        if(nRet != 0)
@@ -1830,14 +1847,14 @@ int ITc_webrtc_file_source_set_path_p(void)
                FPRINTF("[Line : %d][%s] Media file path not found\\n", __LINE__, API_NAMESPACE);
                return 1;
        }
-       g_bCallbackCalled = false;
+
        nRet = webrtc_add_media_source(g_hWebRtcHandle, WEBRTC_MEDIA_SOURCE_TYPE_FILE, &nId);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_add_media_source", WebRtcGetError(nRet));
 
        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));
 
        FPRINTF("[Line : %d][%s] g_pszFilePath = %s\\n", __LINE__, API_NAMESPACE,  g_pszFilePath);
@@ -1848,8 +1865,8 @@ int ITc_webrtc_file_source_set_path_p(void)
        nRet = webrtc_start(g_hWebRtcHandle);
        PRINT_RESULT(WEBRTC_ERROR_NONE, nRet, "webrtc_start", WebRtcGetError(nRet));
 
-       RUN_POLLING_LOOP;
-       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;
        }