[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:7043] Re: r3987 - trunk/src
- X-ml-count: 7043
- Subject: [MD:7043] Re: r3987 - trunk/src
- From: Shun-ichi GOTO <gotoh@xxxxxxxxxxx>
- Date: Fri, 25 Nov 2005 14:57:05 +0900 (JST)
- X-mailer: Mew version 2.2 on Emacs 22.0 / Mule 5.0 (SAKAKI)
>>>>> On 25 Nov 2005 02:54:12 -0000,
>
> Author: horiguti
> Date: 2005-11-25 11:54:10 +0900 (Fri, 25 Nov 2005)
> New Revision: 3987
>
> Modified:
> trunk/src/ChangeLog.Meadow
> trunk/src/mw32term.c
> Log:
> Avoid dead-lock between WM_PAINT and MW32_update_begin.
...snip...
> Modified: trunk/src/mw32term.c
> ===================================================================
> --- trunk/src/mw32term.c 2005-11-24 18:40:02 UTC (rev 3986)
> +++ trunk/src/mw32term.c 2005-11-25 02:54:10 UTC (rev 3987)
> @@ -531,9 +531,21 @@
>
> if (MW32_MAIN_THREAD_P ())
> {
> + int block = FALSE;
> +
> + if (W32_SELF_INPUT_BLOCKED_P)
> + {
> + W32_UNBLOCK_INPUT;
> + block = TRUE;
> + }
> +
> EnterCriticalSection (&(f->output_data.mw32->hdc_critsec));
> phdc = &f->output_data.mw32->hdc;
> LeaveCriticalSection (&(f->output_data.mw32->hdc_critsec));
> +
> + if (block)
> + W32_BLOCK_INPUT;
> +
> pcount = &f->output_data.mw32->hdc_refcount;
> }
> else
これなんですが、HDC 二関する最近の変更はまったく目を通せていないので、
ソースをちゃんと見ずにいっていますが、ちょっと気になったので。。。
上記diff のようなことしなければならない状況と言うのが、ちょっと心配です。
それよりなにより、 メンバ hdc のポインタを取得するためにクリティカルセク
ションを使用するって、意味が無くないですか? phdc を保持する理由があると
したらmw32 のポインタ値が変わった事に対応するためと考えられますが、その値
が変化するのだとしたらEnterCriticalSection()/LeaveCriticalSection() で使
用するわけにはいかないはずだし。
あと、hdc_refcount って本当に必要なのかな? と気になる。DC の使い方を整理
したという事だったと思うのですが、refcount を用いる必要があると言う事は参
照による複製を作られると言う事ですよね。それって整理方向と違うような気が
して。1つのスレッドで描画する事が徹底していて、GetDC()で描画時にHDCを取得
するのであれば、HDCは参照コピーされるような事はないと単純に考えますが、そ
ういうわけにもいかない? (ソースを見てないので的外れの可能性が高いのです
が)。
--- Regards,
Shun-ichi Goto <gotoh@xxxxxxxxxxx>
R&D Group, TAIYO Corp., Tokyo, JAPAN