isaki68k / nono-issue

1 stars 0 forks source link

0.2.6 が shutdown -p now でプロセスが終了できない #110

Closed isaki68k closed 2 years ago

isaki68k commented 2 years ago

Ubuntuでも一回起きてたけど、

https://twitter.com/ao_kenji/status/1494489011456724992

O/luna88k on nono-0.2.6 on O/amd64の環境で、O/luna88kでshutdown -p nowすると、ホスト側で pthread_mutex_destroy on mutex with waiters! と言われる。Oの実装でチェックを入れているらしい。 https://nanxiao.me/en/openbsd-gives-a-hint-on-forgetting-unlock-mutex/ この辺? http://bxr.su/OpenBSD/lib/libc/thread/rthread_mutex.c#81

https://twitter.com/ao_kenji/status/1494656733327007749

同じ原因なのか、GUI版でshutdown -p nowしてもnonoのメインウィンドウは終了せず、メニューも反応しない。起動したターミナルエミュレータでCtrl-Cすると pthread_mutex_destroy on mutex with waiters! を表示して終了する。 (nono-0.2.6 on OpenBSD/amd64)

isaki68k commented 2 years ago

メモ。c34dbf54 なのは分かった。

isaki68k commented 2 years ago

2e8719a3 (2022-02-21) でとりあえず修正。 clock-sync=virtual でないと起きない(起きにくい?)はず。

isaki68k commented 2 years ago

最小化したパッチ。

--- a/vm/rtc.cpp
+++ b/vm/rtc.cpp
@@ -237,7 +237,11 @@ RTCDevice::ClockIn_PowerOff()
        // RTC が現実より遅れているので早回し
        return 0;
    } else {
-       return stime - rt;
+       uint64 dt = stime - rt;
+       if (dt > period * 2) {
+           dt = period * 2;
+       }
+       return dt;
    }
 }
isaki68k commented 2 years ago

あおやまさんにて追試。これが解決にはならなかったようだ (が、それはそれとして、clock-sync=virtualの時に待たされる問題は直ったはず)。

https://twitter.com/ao_kenji/status/1496262997140189184

対応ありがとうございます。残念ながらこちらの環境では変化なしでした。 なお、GUI版を起動して、メニューの File → Exit でも同様の現象(メニューに反応しなくなり、Ctrl-Cで終了)になります。

isaki68k commented 2 years ago

固まった時のバックトレースを依頼。signalthreadがまだ生きているあたりというくらいか…。

https://twitter.com/ao_kenji/status/1496440326973648900

nono(GUI版)起動 → メニューで File-Exit 選択 → 固まる → kill ABRT したときの core を gdb で読み込んだものです。なお、debugger-port = 0 指定です。

(gdb) bt
#0  _thread_sys___thrsigdivert () at /tmp/-:3
#1  0x0000093ec2a30880 in sigwait (set=Unhandled dwarf expression opcode 0xa3
) at /usr/src/lib/libc/gen/sigwait.c:39
Die: DW_TAG_<unknown> (abbrev = 79, offset = 7391166)
has children: FALSE
attributes:
DW_AT_type (DW_FORM_ref4) constant ref: 7373331 (adjusted)
Dwarf Error: Cannot find type of die [in module /home/aoyama/work/nono-0.2.6/wx/nono]
(gdb)
isaki68k commented 2 years ago

https://twitter.com/ao_kenji/status/1545978857358241792

報告遅くなりましたが以下の issue について OpenBSD/amd64 7.1 + nono-0.4.0 では正常に終了するようになりました。

4a34b3ae (2022-05-05) の SIGPIPE の修正が効いたはず。