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

Re: [MD:7157] rev4004 以降の文字コード関連修正を revert しませんか



藤井です。

From: "M.Fujii" <boochang@xxxxxxxxxxxx>
Subject: [MD:7157] rev4004 以降の文字コード関連修正を revert しませんか
Date: Sat, 21 Jan 2006 02:38:24 +0900 (JST)
> openp で落ちるというバグが報告されています。
> 
> http://www.meadowy.org/meadow/ticket/279
> 
> これと同じところで落ちる現象は私の環境でも発生します。
> # まだ確実な再現手順が分かっていないですが
(snip)
> openp が落ちるというのは、漢字交じりのパスが使えないことよりもかなり深
> 刻な問題だと思います。私としては「別の問題」というのがどういうものか分
> からない以上、まず一旦 rev4004 以前の状況に戻して、問題を再整理してから
> 再度修正すべきだと思います。

元に戻すという提案は後向きなので、ちょっとコードを見てみました。

確証はまだないのですが、GC がらみではないでしょうか?

以下の ChangeLog.Meadow のエントリを見るかぎりでは、rev4006 で
sys_spawnve に導入された変数 decoded_program にも GC 対策が必要なのでは
ないでしょうか?


2005-07-10  Kyotaro HORIGUCHI  <horiguti@xxxxxxxxxxx>

	* w32proc.c (sys_spawnve): Don't use LISP string object directly
	being pointed by C pointer here because GC may move the object on
	Ffuncall(call1) used after here.

ということで、以下のパッチを作ってみました。openp で落ちる方は試してみ
てください。

Index: w32proc.c
===================================================================
--- w32proc.c	(revision 4014)
+++ w32proc.c	(working copy)
@@ -855,8 +855,14 @@
   {
     Lisp_Object func, arg, result, decoded_cmdname;
 
-    func = call1 (intern ("find-process-argument-editing-function"),
-		  decoded_program);
+    {
+      struct gcpro gcpro1;
+
+      GCPRO1 (decoded_program);
+      func = call1 (intern ("find-process-argument-editing-function"),
+		    decoded_program);
+      UNGCPRO;
+    }
     if (NILP (func))
       {
 	arglen = 0;
@@ -880,9 +886,9 @@
       }
     else
       {
-	struct gcpro gcpro1, gcpro2;
+	struct gcpro gcpro1, gcpro2, gcpro3;
 	arg = Qnil;
-	GCPRO2 (arg, func);
+	GCPRO3 (arg, func, decoded_program);
 	targ = argv;
 	while (*targ)
 	  {


--
藤井 正行 / Masayuki FUJII