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

Re: [MD:7203] emacs-22_0_50-20060215 マージしました



藤井です。

From: MIYOSHI Masanori <miyoshi@xxxxxxxxxxx>
Subject: Re: [MD:7203] emacs-22_0_50-20060215 マージしました
Date: Sun, 19 Feb 2006 09:56:30 +0900
> > > 再現方法は以下のとおり。
> > > 
> > > 1. meadow -q で起動
> > > 2. C-h i で info を表示
> > > 
> > > ここでキー操作を一切受付けない
> 
> > sync 前の r4030 でも発生することを確認しました。ただし 2. の操作を以下
> > のように変えています。
> 
> > 2'. C-u M-x info <Meadowのディレクトリ>/info/dir で info を表示
> 
> > とりあえず今回の Sync up が原因ではなさそうです。
> 
> どうやらr4016での mw32_cross_disabled_image() に対する変更が原因の
> ようです。
> 
> > 2006-01-26  Masayuki FUJII  <boochang@xxxxxxxxxxxx>
> > 	* image.c (mw32_image_to_fullcolor): use GET/RELEASE_FRAME_HDC
> > 	instead of FRAME_HDC.
> > 	(mw32_cross_disabled_image): Ditto.

FRAME_HDC がだめなら GET_FRAME_HDC を使うという方針は間違っていた訳です
ね。GET_FRAME_HDC の方は排他処理が含まれるので、恐らくタイミングによっ
ては問題を引き起こすということでしょう。

> 以下の変更をキャンセルすると問題は解決します。
> 対応策を考えてもらえませんか? > 藤井さん

本質的な対処については HDC 取得の仕組の見直しが必要だと思います。
# 堀口さん、宜しくお願いします。

暫定処置として、以下のように直接 HDC を取得する対処すれば良いのではない
かと思います。

直接取得しても以下の点から(暫定処置と割り切れば)問題はないと考えます。

  - HDC は描画のために利用しているのではないので、排他の必要はない
  - HDC の不足についても、他がちゃんと管理されているはずなので 1 個を
    一時的に使用するには問題にならない

Index: src/image.c
===================================================================
--- src/image.c	(revision 4037)
+++ src/image.c	(working copy)
@@ -5065,11 +5065,13 @@
   if (pbmpinfo->bmiHeader.biBitCount == 32)
     return 1;
 
-  hdc = GET_FRAME_HDC (f);
+  /* workaround: both of GET_FRAME_HDC and FRAME_HDC is not available. */
+  hdc = GetDC (FRAME_MW32_WINDOW (f));
 
   hCompatDC = CreateCompatibleDC (hdc);
 
-  RELEASE_FRAME_HDC (f);
+  /* workaround: both of GET_FRAME_HDC and FRAME_HDC is not available. */
+  ReleaseDC (FRAME_MW32_WINDOW (f), hdc);
 
   hbmp = CreateDIBSection (hCompatDC, pbmpinfo, DIB_RGB_COLORS,
 			   (void **)&pdata, NULL, 0);
@@ -5122,7 +5124,8 @@
      struct frame *f;
      struct image *img;
 {
-  HDC hdc = GET_FRAME_HDC (f);
+  /* workaround: both of GET_FRAME_HDC and FRAME_HDC is not available. */
+  HDC hdc = GetDC (FRAME_MW32_WINDOW (f));
   HDC hCompatDC;
   HBITMAP hbmp, hbmpmask;
   mw32_image* pmimg = &(img->mw32_img);
@@ -5134,7 +5137,8 @@
 
   hCompatDC = CreateCompatibleDC (hdc);
 
-  RELEASE_FRAME_HDC (f);
+  /* workaround: both of GET_FRAME_HDC and FRAME_HDC is not available. */
+  ReleaseDC (FRAME_MW32_WINDOW (f), hdc);
 
   hbmp = CreateDIBSection (hCompatDC, pbmpinfo, DIB_RGB_COLORS,
 			   (void **)&pdata, NULL, 0);


--
藤井 正行 / Masayuki FUJII