デッドロックの例を1回記録
この問題は、2つのプロセスの通信に失敗したことですが、ipcメッセージは、システム内のgdbスタック情報関数pthread_のように送信されました.joinは1つのスレッドの終了を待つために使用され、スレッド間同期の操作スレッド3は破棄プロセスを閉じている.内部GLIBC pthread反発ロックを持ち、スレッド3はpthread_を呼び出す.join()は、別のスレッド(スレッド2)の終了を待つ.スレッド2が終了すると、スレッド3が既に保持しているGLIBC pthread反発ロックが必要となる.このため、スレッド2とスレッド3が互いにブロックされた後、デッドロックが発生し、IPCが不通となる
pthread_を印刷mutex_tデータはlock=2を発見し,デッドロックが発生する.
Thread 3 (Thread 0x2b8424e30700 (LWP 1389)):
#0 0x00002b84151be49d in pthread_join (threadid=47846560868816, thread_return=0x0) at pthread_join.c:90
#1 0x00002b8425037cb4 in AlarmReporterHaObserver::~AlarmReporterHaObserver (this=, __in_chrg=)
at sw/se/xc/bsd/plat/sf/common/oam/fm/lib/alarm_reporter/alarm_reporter_api.cc:111
#2 0x0000003723e37dcf in __cxa_finalize (d=0x2b84252396c0) at cxa_finalize.c:56
#3 0x00002b8425037a61 in __do_global_dtors_aux () from /opt/ipos/lib/libalarm_reporter.so.0.0
---Type to continue, or q to quit---
#4 0x0000000000000000 in ?? ()
Thread 2 (Thread 0x2b842543a700 (LWP 1390)):
#0 __lll_lock_wait () at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
#1 0x00002b84151bf922 in __GI___pthread_mutex_lock (mutex=0x3723c22948 <_rtld_local>) at ../nptl/pthread_mutex_lock.c:115
#2 0x0000003723a1170d in tls_get_addr_tail (ti=, dtv=, the_map=) at dl-tls.c:765
#3 0x00002b84146da145 in cm_log_information (event=3293053056, formatstring=) at sw/se/xc/bsd/plat/sf/common/oam/lib/cm_log/ipos_log/iposlog.cc:62
#4 0x00002b8425037b50 in AlarmReporterHaObserverRun (arg=) at sw/se/xc/bsd/plat/sf/common/oam/fm/lib/alarm_reporter/alarm_reporter_api.cc:53
#5 0x00002b84151bd2b4 in start_thread (arg=0x2b842543a700) at pthread_create.c:336
#6 0x0000003723ee819d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
(gdb)
(gdb) print *(pthread_mutex_t *)0x3723c22948
$7 = {__data = {__lock = 2, __count = 1, __owner = 1389, __nusers = 1, __kind = 1, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}},
__size = "\002\000\000\000\001\000\000\000m\005\000\000\001\000\000\000\001", '\000' , __align = 4294967298}
(gdb)
pthread_を印刷mutex_tデータはlock=2を発見し,デッドロックが発生する.