CGO: обработчик сигнала вызывается в runtime.futex () по адресу /usr/lib/golang/src/runtime/sys_linux_amd64.s:536 - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть простой CGO код, который выполняет проверку пользователя. Этот модуль компилируется в файл pam c .so при сборке go. Этот pam c .so динамически загружается моим приложением во время запуска и выгружается при его остановке. Процесс подачи заявки написан в "C". Мое веб-приложение запускается в контейнере docker.

Когда я тестировал свое веб-приложение, модуль CGO (pam c .so) прекрасно работает во всех случаях, кроме случаев, когда контейнер остановлен / убит. В этих ситуациях мое приложение веб-интерфейса заканчивается исключением, которое, по-видимому, вызвано go -runtime из-за исключения в нем.

go версия go1.10.2 linux/amd64

Компиляция моего CGO: go build -buildmode=c-shared -o pamc.so. pamc.go

Любая идея, если это ошибка в CGO -runtime? если нет, есть идеи, как решить эту ошибку, пожалуйста?

Вот подробности об исключении в CGO -runtime (подробности GDB):

(gdb) where #0  0x00007f583d9478df in raise () from /lib64/libc.so.6 
#1  0x00007f583d931cf5 in abort () from /lib64/libc.so.6 
#2  0x00007f583f5b1dad in myExceptionHandler () from /opt/authenitcate/lib64/libauth_r.so 
#3  0x00007f583565477d in runtime.sigfwd () at /usr/lib/golang/src/runtime/sys_linux_amd64.s:337 
#4  0x000000c00006b3a8 in ?? () 
#5  0x00007f583563bd8b in runtime.sigfwdgo (sig=11, info=0xc00006b5f0, ctx=0xc00006b4c0, ~r3=<optimized out>) at /usr/lib/golang/src/runtime/signal_unix.go:660 
#6  0x00007f583563af00 in runtime.sigtrampgo (sig=<optimized out>, info=0xc00006b5f0, ctx=0xc00006b4c0) at /usr/lib/golang/src/runtime/signal_unix.go:289 
#7  0x00007f58356547d3 in runtime.sigtramp () at /usr/lib/golang/src/runtime/sys_linux_amd64.s:357 
#8  <signal handler called> 
#9  0x00007f583f5b2530 in ?? () from /opt/authenitcate/lib64/libauth_r.so
#10 <signal handler called> 
#11 runtime.futex () at /usr/lib/golang/src/runtime/sys_linux_amd64.s:536 
#12 0x00007f58356267c2 in runtime.futexsleep (addr=0x7f58359dac10 <runtime.sched+272>, val=0, ns=60000000000) at /usr/lib/golang/src/runtime/os_linux.go:63 
#13 0x00007f58356098f4 in runtime.notetsleep_internal (n=0x7f58359dac10 <runtime.sched+272>, ns=60000000000, ~r2=<optimized out>) at /usr/lib/golang/src/runtime/lock_futex.go:193 
#14 0x00007f58356099d5 in runtime.notetsleep (n=0x7f58359dac10 <runtime.sched+272>, ns=60000000000, ~r2=<optimized out>) at /usr/lib/golang/src/runtime/lock_futex.go:216 
#15 0x00007f5835634c56 in runtime.sysmon () at /usr/lib/golang/src/runtime/proc.go:4305 
#16 0x00007f583562d258 in runtime.mstart1 () at /usr/lib/golang/src/runtime/proc.go:1206 
#17 0x00007f583562d171 in runtime.mstart () at /usr/lib/golang/src/runtime/proc.go:1172 
#18 0x00007f58356b384e in crosscall_amd64 () from /opt/authenitcate/lib64/pamc.so 
#19 0x00007f5811193fc0 in ?? () 
#20 0x00007f5813994d40 in ?? () 
#21 0x00007f5813994b4f in ?? () 
#22 0x00007f5813994b4e in ?? () 
#23 0x00007f5811193ef0 in ?? () 
#24 0x0000000000000000 in ?? ()
...