Fix crash when calling ssdp_stop_browsing_service() 54/123254/1 accepted/tizen/unified/20170406.054810 submit/tizen/20170405.061651
authorchleun.moon <chleun.moon@samsung.com>
Wed, 5 Apr 2017 05:30:28 +0000 (14:30 +0900)
committerchleun.moon <chleun.moon@samsung.com>
Wed, 5 Apr 2017 05:30:38 +0000 (14:30 +0900)
Change-Id: I7455e192bd503bcc453486619e119f079eb6ebc8
Signed-off-by: cheoleun <chleun.moon@samsung.com>
src/ssdp/ssdp.c

index ca92dfc838effba16f7c5315c8012c4ce10ff3d5..89980e40734d34abd11e0239f0d1b750fac811d8 100644 (file)
@@ -60,6 +60,8 @@ typedef struct {
        ssdp_state_e origin;
 
        unsigned int resource_id;
+       gulong available_sid;
+       gulong unavailable_sid;
        GSSDPResourceGroup *resource_group;
        GSSDPResourceBrowser *resource_browser;
 
@@ -349,7 +351,7 @@ __ssdp_res_unavailable_cb(GSSDPResourceBrowser *resource_browser,
 
        browser = (ssdp_service_s *)user_data;
        if (browser == NULL) {
-               SSDP_LOGE("Service not found");
+               SSDP_LOGE("Browser not found");
                return;
        }
 
@@ -931,10 +933,10 @@ GLIST_ITER_END()
                }
 
                /* Connect signals */
-               g_signal_connect(browser->resource_browser, "resource-available",
+               browser->available_sid = g_signal_connect(browser->resource_browser, "resource-available",
                                G_CALLBACK(__ssdp_res_available_cb), browser);
 
-               g_signal_connect(browser->resource_browser, "resource-unavailable",
+               browser->unavailable_sid = g_signal_connect(browser->resource_browser, "resource-unavailable",
                                G_CALLBACK(__ssdp_res_unavailable_cb), browser);
 
                gssdp_resource_browser_set_active(browser->resource_browser, TRUE);
@@ -978,6 +980,8 @@ int ssdp_stop_browsing_service(ssdp_browser_h ssdp_browser)
                return SSDP_ERROR_SERVICE_NOT_FOUND;
        }
 
+       g_signal_handler_disconnect(browser->resource_browser, browser->available_sid);
+       g_signal_handler_disconnect(browser->resource_browser, browser->unavailable_sid);
        gssdp_resource_browser_set_active(browser->resource_browser, FALSE);
 
        g_object_unref(browser->resource_browser);