[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:7147] クラッシュ on rev 4012



反応悪くてすみません.

> 会社で使っている二本の Meadow3 はまったく落ちないで安定している
> のですが、自宅の Meadow3 が結構高い頻度で落ちるのでした。落ちる
> ときは、うーーん、特に脈絡無くなにかやっている途中でどーーんといっ
> た感じです。

 私の環境ではすっかり安定してしまったのですが^^;

> これでなにかわかりますか?あるいは、このあと gdb でなにをすると
> お役に立てるでしょうか?

 構造体の連鎖の具体的にどこが SEGV かわかるともっと対象を絞り込め
ますが, 多分 current_matrix の実体が上書きされていて,
row->enabled_p のアクセスあたりでクラッシュしていると思います.

 emacs ではこれは BLOCK_INPUT で守っているようにも見えるのですが
Meadow はスレッド構成が違う(んですよね? 確かめてませんが)のか効か
ないようですね.. (というかBLOCK_INPUT の中身を見ると少なくとも
Meadow では効くようにも見えませんが)

 両方とも多分 expose_frame が走ってから current_matrix が realloc
されているのだと思います. 本当はちゃんと呼び出し関係もチェックする
べきなのですがとりあえず以下のパッチを試してみてもらえませんか? 頻
度が高いということなので効果があるならわかりやすいでしょう:-p

# ちょっと先祖がえりっぽいのがアレですが...

Index: dispnew.c
===================================================================
--- dispnew.c	(revision 4012)
+++ dispnew.c	(working copy)
@@ -2493,6 +2493,9 @@
       /* Block interrupt input so that we don't get surprised by an X
          event while we're in an inconsistent state.  */
       BLOCK_INPUT;
+#ifdef MEAODW
+      GET_FRAME_HDC (f);
+#endif
       f->glyphs_initialized_p = 0;
 
       /* Release window sub-matrices.  */
@@ -2537,6 +2540,9 @@
 	  f->desired_pool = f->current_pool = NULL;
 	}
 
+#ifdef MEAODW
+      RELEASE_FRAME_HDC (f);
+#endif
       UNBLOCK_INPUT;
     }
 }
@@ -6198,6 +6204,9 @@
     return;
 
   BLOCK_INPUT;
+#ifdef MEAODW
+  GET_FRAME_HDC (f);
+#endif
 
 #ifdef MSDOS
   /* We only can set screen dimensions to certain values supported
@@ -6264,6 +6273,9 @@
   SET_FRAME_GARBAGED (f);
   f->resized_p = 1;
 
+#ifdef MEAODW
+  RELEASE_FRAME_HDC (f);
+#endif
   UNBLOCK_INPUT;
 
   record_unwind_protect (Fset_buffer, Fcurrent_buffer ());

-- 
ほりぐちきょうたろう