server: Change to register signal handler with glib 25/290925/1 accepted/tizen_6.5_unified accepted/tizen/6.5/unified/20230407.060419 submit/tizen_6.5/20230405.064208 submit/tizen_6.5/20230406.052413
authorTaeminYeom <taemin.yeom@samsung.com>
Tue, 4 Apr 2023 01:09:36 +0000 (10:09 +0900)
committerTaeminYeom <taemin.yeom@samsung.com>
Wed, 5 Apr 2023 05:31:45 +0000 (14:31 +0900)
commit33c5fb7656e06df8899f1e4e50c89c6f33984b45
tree3eda0a575e4a79032a1ed134d5ca4ab74bfc39f0
parent5ee4940c0d56ab6329181e9156af2a612a13059c
server: Change to register signal handler with glib

Using std signal handler can make deadlock in terminating progress.
When std signal handler is called dispatching g_main_context,
glib attempts to lock g_main_context again.
To prevent this situation, it is needed to use glib signal handler function.

When there is a deadlock, the callstack is with below.

0  0x0000007fb3fa3860 in syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
1  0x0000007fb44ced7c in g_mutex_lock_slowpath (mutex=0x55cda9eaa0) at ../glib/gthread-posix.c:1340
2  0x0000007fb44cf7a0 in g_mutex_lock (mutex=<optimized out>) at ../glib/gthread-posix.c:1364
3  0x0000007fb4480400 in g_main_loop_quit (loop=0x55cda9cc30) at ../glib/gmain.c:4136
4  0x0000007fb4286e68 in ipc::event_loop::terminate() (this=0x558f0e55b0 <sensor::server::m_loop>)
    at /usr/src/debug/sensord-4.0.54-1.aarch64/src/shared/event_loop.cpp:339
5  0x0000007fb4286f38 in ipc::event_loop::stop() (this=<optimized out>)
    at /usr/src/debug/sensord-4.0.54-1.aarch64/src/shared/event_loop.cpp:331
6  0x000000558f0c8620 in sensor::server::stop() ()
    at /usr/src/debug/sensord-4.0.54-1.aarch64/src/server/server.cpp:73
7  0x0000007fb48195b4 in <signal handler called> ()
8  0x0000007fb404fd64 in read () at /lib64/libpthread.so.0
9  0x0000007fb44caf90 in read (__nbytes=16, __buf=0x7fc1419d38, __fd=<optimized out>)
    at /usr/include/bits/unistd.h:44
10 0x0000007fb44caf90 in g_wakeup_acknowledge (wakeup=0x55cda89530) at ../glib/gwakeup.c:210
11 0x0000007fb447fa04 in g_main_context_check
    (context=context@entry=0x55cda9eaa0, max_priority=2147483647, fds=fds@entry=0x55cdb19e00, n_fds=n_fds@entry=27) at ../glib/gmain.c:3695
12 0x0000007fb447fe4c in g_main_context_iterate
    (context=0x55cda9eaa0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../glib/gmain.c:3914
13 0x0000007fb4480308 in g_main_loop_run (loop=0x55cda9cc30) at ../glib/gmain.c:4111
14 0x0000007fb4288308 in ipc::event_loop::run(int)
    (this=0x558f0e55b0 <sensor::server::m_loop>, timeout=<optimized out>)
    at /usr/src/debug/sensord-4.0.54-1.aarch64/src/shared/event_loop.cpp:322
15 0x000000558f0b6b50 in main(int, char**) (argc=<optimized out>, argv=<optimized out>)

Change-Id: I19e688ea16ab5e33b0c499abad866970a3d79761
Signed-off-by: TaeminYeom <taemin.yeom@samsung.com>
src/server/main.cpp