suzukiplan / Touhou-VGS-MML-data

東方BGM on VGSのMMLデータ公開&サポート用のレポジトリです
http://hp.vector.co.jp/authors/VA040196/
36 stars 3 forks source link

メインループでSIGSEGVで落ちる(Android) #40

Open suzukiplan opened 9 years ago

suzukiplan commented 9 years ago

上記ANRレポートが本日2回あった。

suzukiplan commented 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
suzukiplan commented 9 years ago

落ちた時のレジスタ:

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
suzukiplan commented 9 years ago

一瞬、「コレか!?」と思い https://github.com/suzukiplan/Touhou-VGS-MML-data/commit/fd707b54f0b2d0f1836b39e38cb3037ef3a74326 の修正をしてみたが違うかも。 何せ再現機が無いし、再現手順も分からないから、これで治るとは判断し難い。

suzukiplan commented 9 years ago

今日、★1が2~3件程度ついたので、多分コレが原因じゃないかと思うけど、どういう契機で発生したか教えてくれると対策が大分楽になるのですが...

suzukiplan commented 9 years ago

むしろ、「落ちたよ!」と報告無しに★1をつけるシチュエーションを想像してみようか... 「新規インストール時にのみ発生する現象」とか。 新規さんなら、起動して落ちたのなら当然無言で★1を付けて去る筈。

suzukiplan commented 9 years ago

あとは、とりあえず https://github.com/suzukiplan/Touhou-VGS-MML-data/commit/fd707b54f0b2d0f1836b39e38cb3037ef3a74326 の修正だけ入れて反応を見てみるとか。

suzukiplan commented 9 years ago

とりあえず PR https://github.com/suzukiplan/Touhou-VGS-MML-data/pull/44 でマージして、version 1.19aとしてリリースして様子見。 直ったという確証が無いので、このIssueはcloseせず、引き続き調査続行。

suzukiplan commented 9 years ago

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 のバグじゃなかろうかということ...

suzukiplan commented 9 years ago

iOS8 に然り、 Lollipop に然り、OSに機能を追加することよりも品質向上に注力して欲しいところ。 今回の件は Lollipop ではまだ報告が無く Jelly bean で起きてる問題ですが

suzukiplan commented 9 years ago

レビューの方でも現象再現の報告があった。 やはり、バックグラウンド動作時に落ちているらしい。(OSはkitkat) 今日もNexus5+Lollipopで検証する機会があったので検証してみたが、やはり現象は再現せず。