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

Re: [MD:7279] チケット #237



やまざきです。

Date: Mon, 24 Apr 2006 18:48:03 +0900 (JST)
From: Hideyuki SHIRAI (白井秀行) <shirai@xxxxxxxxxxx>
Subject: Re: [MD:7279] チケット #237
> 
> 白井です。
> 
> やまざきさん、解説ありがとうございます。
> 藤井さんもサンキューです。
> 
> ところで、今気付いたのですが、exclusion-01.patch に三箇所ほどある
> 
>     『#ifdef MEAODW』
> 
> は "MEADOW" ですよね :-)

はい、そうです。

# かなり、なさけないです。orz

一応その3箇所の影響ですが、
- free_glyphs ()の2箇所は、
  * 呼び元のFdelete_frame ()の方で排他がかかっているので、問題ないと思います。  
  * もうひとつのcheck_glyph_memory ()の方も、emacs終了時にだけ呼ばれるようなので
    多分影響がないと思います。
- free_window_matrices ()の1箇所は、排他をかけたまま解除しない状態に
  なっていて、前のメールで書いたwindow.cのad-hocな対処の原因と思います。
  これを直せば、window.cへのパッチは必要なくなると思いますが、
  逆に言うと、これによって排他区間が長くなっていたため、問題が
  発生しなくなっていた可能性があるので、もう少しテストする必要が
  あるのかもしれません。

> って、よくよく見たら dispnew.c にもとから "MEAODW" があったん
> だ。。。うーーむ。なんてこったい。

もとからあったadjust_glyphsの方のifdefを有効にすると、
手元では起動時にadjust_glyphsのGET_FRAME_HDCで落ちてしまいます。

redisplay_internal@xxxxxxxに、adjust_glyphs (NULL);と
引数をNULLで呼び出す場合があり、このとき、GET_FRAME_HDC内の
FRAME_MW32_PでNULLアクセスして落ちているようです。

adjust_glyphsではなく、adjust_frame_glyphsの方で排他をかけるのかなと。

一応この部分のパッチです。

Index: dispnew.c
===================================================================
--- dispnew.c   (revision 4060)
+++ dispnew.c   (working copy)
@@ -2093,9 +2087,7 @@
   /* Block input so that expose events and other events that access
      glyph matrices are not processed while we are changing them.  */
   BLOCK_INPUT;
-#ifdef MEAODW
-  GET_FRAME_HDC (f);
-#endif
+
   if (f)
     adjust_frame_glyphs (f);
   else
@@ -2106,9 +2098,6 @@
        adjust_frame_glyphs (XFRAME (lisp_frame));
     }

-#ifdef MEAODW
-  RELEASE_FRAME_HDC (f);
-#endif
   UNBLOCK_INPUT;
 }

@@ -2155,6 +2144,10 @@
 adjust_frame_glyphs (f)
      struct frame *f;
 {
+#ifdef MEADOW
+  GET_FRAME_HDC (f);
+#endif
+
   if (FRAME_WINDOW_P (f))
     adjust_frame_glyphs_for_window_redisplay (f);
   else
@@ -2166,6 +2159,10 @@
   adjust_decode_mode_spec_buffer (f);

   f->glyphs_initialized_p = 1;
+
+#ifdef MEADOW
+  RELEASE_FRAME_HDC (f);
+#endif
 }


> 特に反対意見が無ければ、将来的にどうするかは別として、現状めちゃ
> くちゃ不安定な環境がありうるので、上記の MEAODW を直して実験した
> 後、コミットしちゃおうと思うのですが、どうでしょうか。
> 
> -- 
> 白井秀行 (mailto:shirai@xxxxxxxxxxx)

-- 
yamazaki-k(at)mwe.biglobe.ne.jp