[Anthy-dev 368] anthy_quit()時のクリーンアップ漏れ

アーカイブの一覧に戻る

YamaKen yamak****@bp*****
2004年 1月 7日 (水) 09:35:53 JST


ヤマケンです。

anthy_quit()時のクリーンアップ漏れを一部修正しました。差分を添付
します。anthy-4700からの差分になっていますが、anthy-4901にもその
まま当てて問題ないと思います。

Anthy及びuimではプロセス終了に伴うメモリ破棄に期待してクリーンアッ
プを省略している個所がいくつかありますが、Qtopia環境では問題にな
るので説明しておきます。

Qtopia環境でのIMはQ Window Systemのサーバプロセスに対してプラグ
インとして何度もload/unloadを繰り返します。このため、プロセス終
了時の破棄に頼らずに全てのメモリを自力で解放する必要があります。
また、細部まで追っていないのですがunload→loadが実行された時に
bssセクションがゼロクリアされずに残るようです。これが原因で
IMKit-AnthyとIMKit-uim-anthyでIMリロード時にSEGVが発生していまし
た(添付のパッチで一応解決しました)。

Anthy, uim共に上記のクリーンアップ漏れが残っているようなので、も
し該当個所周辺のコードをいじる事があったらついでに直してもらえる
と嬉しいです。私もIMKit 0.4.0をリリースしたら一通り確認するつも
りです。

#IMKit-uimは概ね問題なく動いています。あとちょっとです。

-------------------------------
ヤマケン yamak****@bp*****
-------------- next part --------------
diff -urN -x *~ anthy-4700.orig/src-diclib/conf.c anthy-4700/src-diclib/conf.c
--- anthy-4700.orig/src-diclib/conf.c	Tue Jul  8 00:37:02 2003
+++ anthy-4700/src-diclib/conf.c	Wed Jan  7 07:09:02 2004
@@ -124,11 +124,10 @@
 void
 anthy_do_conf_init(void)
 {
-  const char *fn;
-  val_ent_ator = anthy_create_allocator(sizeof(struct val_ent), val_ent_dtor);
-
   if (!confIsInit) {
+    const char *fn;
     struct passwd *pw;
+    val_ent_ator = anthy_create_allocator(sizeof(struct val_ent), val_ent_dtor);
     /*デフォルトの値を設定する。*/
     add_val("VERSION", VERSION);
     fn = anthy_conf_get_str("CONFFILE");
@@ -153,6 +152,8 @@
     next = e->next;
     free(e);
   }
+  ent_list = NULL;
+  confIsInit = 0;
 }
 
 const char *
diff -urN -x *~ anthy-4700.orig/src-splitter/depgraph.c anthy-4700/src-splitter/depgraph.c
--- anthy-4700.orig/src-splitter/depgraph.c	Thu Oct 16 23:03:58 2003
+++ anthy-4700/src-splitter/depgraph.c	Wed Jan  7 07:46:29 2004
@@ -381,4 +381,5 @@
   }
   free(gNodes);
   gNodes = 0;
+  nrNodes = 0;
 }


Anthy-dev メーリングリストの案内
アーカイブの一覧に戻る