namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mod_namazu (Re: FastCGI)



いわきりです

Satoru Takabayashiさんの<199907120524.OAA22920@xxxxxxxxxxxxxx>から
>割と緩やかな膨張ですね。 free し忘れているポインタがどこかに
>あると思うんだけど、簡単に見つける方法はないものかな? (定石
>がありそうなんだけど、どなたか知りません?)

namazu-currentで追いかけました。
メモリリークを起こしている場所を3箇所発見。

(1) namazuをcgiとして利用する際にQUERY_STRING無しの場合
    namazu.cでfree_dbnames()を呼ばずにexit(1)で終了している。

(2)
(3) hlist.c内でテンポラリとして利用する HLIST work, tmpの
    未初期化。それぞれwork.n, tmp.nが未値なのでfree_hlist()に
    失敗。

以上です。

re_match.c, regex.c, result.c, util.cはまだ追いかけてません m(_ _)m
diff -ruN src.orig/hlist.c src/hlist.c
--- src.orig/hlist.c	Tue Jul 13 17:27:03 1999
+++ src/hlist.c	Tue Jul 13 17:28:39 1999
@@ -419,6 +419,7 @@
 void sort_hlist(HLIST hlist, char *mode)
 {
     HLIST work;
+    work.n = hlist.n;
     malloc_hlist(&work, hlist.n);
 
     if (! strcmp(mode, "score")) {
@@ -450,6 +451,7 @@
     int m, n;
     HLIST tmp;
 
+    tmp.n = 1;
     malloc_hlist(&tmp, 1);
     m = 0;
     n = hlist.n - 1;
diff -ruN src.orig/namazu.c src/namazu.c
--- src.orig/namazu.c	Tue Jul 13 17:27:03 1999
+++ src/namazu.c	Tue Jul 13 17:31:21 1999
@@ -276,6 +276,7 @@
             cat(BODYMSGFILE);
             cat_head_or_foot(FOOTERFILE, query, subquery);
         }
+        free_dbnames();
 	exit(1);
     }