Open suzukiplan opened 9 years ago
version 1.19にアップデート後も増加傾向。 今のところ発生バージョンはAndroid 4.3~4.4。 発生端末種別はXperiaが多いけど、これは単純に普及率の関係だと思う。 version 1.19にアップデート後は落ちる箇所が次のように変化:
#00 pc 00010b54 /data/app-lib/com.suzukiplan.TOHOVGS-2/libvge.so (vge_loop+899)
落ちたアドレス(00010b54)付近のディスアセンブル:
000107d0 <vge_loop>:
;
10b48: 2558 movs r5, #88 ; 0x58
10b4a: 1c2e adds r6, r5, #0
10b4c: 4366 muls r6, r4
10b4e: 683d ldr r5, [r7, #0]
10b50: 960c str r6, [sp, #48] ; 0x30
10b52: 19ae adds r6, r5, r6
10b54: 6934 ldr r4, [r6, #16] ★ココでクラッシュ
10b56: 940d str r4, [sp, #52] ; 0x34
10b58: 2c00 cmp r4, #0
10b5a: d001 beq.n 10b60 <vge_loop+0x390>
10b5c: 2301 movs r3, #1
10b5e: 6173 str r3, [r6, #20]
10b60: 9d06 ldr r5, [sp, #24]
10b62: 3d10 subs r5, #16
落ちた時のレジスタ:
r0 00000000 r1 00000000 r2 00000000 r3 c096b800
r4 00000000 r5 00000000 r6 00000000 r7 611585c0
r8 61258b38 r9 59107fc8 sl 578d4b08 fp 61258b4c
ip 80200000 sp 61258a88 lr 6104eba0 pc 6104cb54 cpsr 40000030
d0 0000000000000000 d1 000000000000000b
d2 ffffffffffffffff d3 ffffffffffffffff
d4 8000000000000000 d5 3fcef049fb9094d1
d6 3f00000000000000 d7 005703004b140848
d8 0000000000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 0000000000000002 d17 4155c0c000000000
d18 4146605000000000 d19 0065004e005f0061
d20 3f8948b0fcd6e9e0 d21 3fe555b0aaeac752
d22 3fd24998d6307188 d23 3fcc7288e957b53b
d24 3fc74721cad6b0ed d25 3fc2f112df3e5244
d26 ffffffffffffffff d27 ffffffffffffffff
d28 40008df2d49d41f1 d29 3fb0f4a31edab38b
d30 3ff0000000000000 d31 3f4de16b9c24a98f
scr 20000010
一瞬、「コレか!?」と思い https://github.com/suzukiplan/Touhou-VGS-MML-data/commit/fd707b54f0b2d0f1836b39e38cb3037ef3a74326 の修正をしてみたが違うかも。 何せ再現機が無いし、再現手順も分からないから、これで治るとは判断し難い。
今日、★1が2~3件程度ついたので、多分コレが原因じゃないかと思うけど、どういう契機で発生したか教えてくれると対策が大分楽になるのですが...
むしろ、「落ちたよ!」と報告無しに★1をつけるシチュエーションを想像してみようか... 「新規インストール時にのみ発生する現象」とか。 新規さんなら、起動して落ちたのなら当然無言で★1を付けて去る筈。
あとは、とりあえず https://github.com/suzukiplan/Touhou-VGS-MML-data/commit/fd707b54f0b2d0f1836b39e38cb3037ef3a74326 の修正だけ入れて反応を見てみるとか。
とりあえず PR https://github.com/suzukiplan/Touhou-VGS-MML-data/pull/44 でマージして、version 1.19aとしてリリースして様子見。 直ったという確証が無いので、このIssueはcloseせず、引き続き調査続行。
version 1.19とversion 1.18の時のクラッシュレポートにユーザーメッセージが含まれていた。 バックグラウンド動作中にChromeを起動後、音が途切れ途切れになり、暫くすると落ちたとのこと。 こういうレポートは本当に助かります。 誰かは分かりませんが、ありがとうございました。
当初私の想定では新規インストール時の初回起動で発生するのではないかと疑っていましたが、稼働中の発生だったのか... 状況から察するに、アプリケーションプロセスとサービスプロセスの動きに関する問題の可能性が高いかも。
東方VGSは、フォアグラウンド時はアプリケーションプロセス( SurfaceView
のサブスレッド)がメインループ( vge_loop
)を60回/秒の間隔でコールしていて、バックグラウンドに移行するとサービスプロセス側に vge_loop
の定期実行(20ms interval = 50回/秒)を委ねています。(そして、フォアグラウンドから復帰時はサービスの停止を待ってから再び SurfaceView
にメインループの実行制御を委ねる)
Chromeが動いたことでメモリに余裕がなくなり、カーネルが最初にアプリケーションの停止をかけ、その時にCヒープやスタティック領域の解放が掛かり、サービスが vge_loop
の呼び出しで BOR
or BOW
を起こして Segmentation fault
という線が有力かもしれない。
本来あるべき姿は、アプリケーションに紐づくサービスを止めてからアプリケーションを止めるんじゃなかろうか。もっとも、カーネルのこの辺りのロジックを確認した訳ではないので、まだ確証はないです。
要するに Android のバグじゃなかろうかということ...
iOS8
に然り、 Lollipop
に然り、OSに機能を追加することよりも品質向上に注力して欲しいところ。
今回の件は Lollipop
ではまだ報告が無く Jelly bean
で起きてる問題ですが
レビューの方でも現象再現の報告があった。 やはり、バックグラウンド動作時に落ちているらしい。(OSはkitkat) 今日もNexus5+Lollipopで検証する機会があったので検証してみたが、やはり現象は再現せず。
/data/app-lib/com.suzukiplan.TOHOVGS-2/libvge.so (vge_loop+977)
上記ANRレポートが本日2回あった。