Fix: device can not power off due to crash tizen_2.1 2.1b_release accepted/tizen/20130520.101318 accepted/tizen_2.1/20130425.025055 submit/tizen/20130517.045240 submit/tizen_2.1/20130424.233338
authorChengwei Yang <chengwei.yang@intel.com>
Fri, 12 Apr 2013 02:52:09 +0000 (10:52 +0800)
committerChengwei Yang <chengwei.yang@intel.com>
Fri, 12 Apr 2013 03:07:01 +0000 (11:07 +0800)
system_server crash at power off the phone. See below back trace.

 Program terminated with signal 11, Segmentation fault.
 #0  0xb76a898f in _unregister_noti (key=0xb451e1f8, value=0xb450a6b0,
    user_data=0x0) at
 /usr/src/debug/libslp-tapi-0.6.69/src/tapi_common.c:1290
 1290
 g_dbus_connection_signal_unsubscribe(handle->dbus_connection,
 evt_cb_data->evt_id);
 (gdb) bt
 #0  0xb76a898f in _unregister_noti (key=0xb451e1f8, value=0xb450a6b0,
    user_data=0x0) at
 /usr/src/debug/libslp-tapi-0.6.69/src/tapi_common.c:1290
 #1  0xb74518a9 in g_hash_table_foreach_remove_or_steal ()
   from /usr/lib/libglib-2.0.so.0
 #2  0xb76ad3c5 in tel_deinit (handle=0x8d14e48)
    at /usr/src/debug/libslp-tapi-0.6.69/src/tapi_common.c:1304
 #3  0x08050ff4 in powerdown_ap_by_force (data=0x0)
    at /usr/src/debug/system-server-0.1.65/ss_predefine.c:324
 #4  0xb779c38a in _ecore_timer_expired_call () from
 /usr/lib/libecore.so.1
 #5  0xb779c557 in _ecore_timer_expired_timers_call ()
   from /usr/lib/libecore.so.1
 #6  0xb7798d13 in _ecore_main_loop_iterate_internal ()
   from /usr/lib/libecore.so.1
 #7  0xb779941f in ecore_main_loop_begin () from /usr/lib/libecore.so.1
 #8  0x0804bd45 in system_main (argc=1, argv=0xbfb6f154)
    at /usr/src/debug/system-server-0.1.65/ss_main.c:102
 #9  0x0804bda1 in elm_main (argc=1, argv=0xbfb6f154)
    at /usr/src/debug/system-server-0.1.65/ss_main.c:112
 #10 0x0804bdfe in main (argc=1, argv=0xbfb6f154)
    at /usr/src/debug/system-server-0.1.65/ss_main.c:119

Change-Id: If840b4ae2668deb6f585d85829bdb313ef65a18c
Signed-off-by: Chengwei Yang <chengwei.yang@intel.com>
packaging/libslp-tapi.spec
src/tapi_common.c

index 0c7112e8fc8319689a6a5633ce810b74a7acfa13..ec5daa7ad90dd6b9fafff664e02ee234ff224fa3 100644 (file)
@@ -1,7 +1,7 @@
 Name: libslp-tapi
 Summary: Telephony dbus client library
 Version: 0.6.69
-Release:    1
+Release:    2
 Group:      System/Libraries
 License:    Apache-2.0
 Source0:    libslp-tapi-%{version}.tar.gz
index b1b13afab3376684baffc4feab3e00ca8bd967da..04ec9cc48bdea1ea1739e95913935d886bbae7ad 100644 (file)
@@ -1287,6 +1287,9 @@ static gboolean _unregister_noti(gpointer key, gpointer value, gpointer user_dat
        struct tapi_evt_cb *evt_cb_data = value;
        TapiHandle *handle = user_data;
 
+       if (handle == NULL)
+               return TRUE;
+
        g_dbus_connection_signal_unsubscribe(handle->dbus_connection, evt_cb_data->evt_id);
 
        return TRUE;
@@ -1301,7 +1304,7 @@ EXPORT_API int tel_deinit(TapiHandle *handle)
        g_free(handle->path);
 
        dbg("Remove all signals");
-       g_hash_table_foreach_remove(handle->evt_list, _unregister_noti, NULL);
+       g_hash_table_foreach_remove(handle->evt_list, _unregister_noti, handle);
        g_hash_table_destroy(handle->evt_list);
 
        g_cancellable_cancel(handle->ca);