namazu-dev(ring)


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

memory leak on libnmz



  Search-Namazu の方が一段落したので、memory leak の方をチェックするこ
とにしました。

1. word search に関して

  word 数が 3 以上になると、memory leak を起こすようです。malloc_hlist
で確保した領域が一部開放されなくなります。word 数が増加すると、memory
leak もそれに比例して増加するようです。

  これから code を追っかけてみます。

2. regex search に関して

  ccmalloc は、free(NULL)があるとそこで止まってしまうようです。regex
search を行うとこの状況に陥ってしまい、core dump してしまいます。

# 少なくとも、Linux の free(NULL) はなにもしないで通すようになっている
# のですが... ANSI 的にはどうでしたっけ?

  gdb にかけるとこんな感じです。

#0  0x4003b461 in kill () from /lib/libc.so.6
#1  0x8059c23 in die ()
#2  0x805e1da in _ccmalloc_free ()
#3  0x805e68f in ccmalloc_free ()
#4  0x8059a06 in free ()
#5  0x8054908 in re_free_pattern (bufp=0x807be64) at regex.c:2315
#6  0x80596dc in regex_grep (orig_expr=0xbfffd774 "mail", fp=0x807bc1c,
    field=0x805f15d "", field_mode=0) at re.c:252
#7  0x804c193 in do_regex_search (orig_expr=0xbfffdfc8 "/mail/", val={n = 0,
      d = 0x4003b388}) at search.c:515
#8  0x804ce8b in do_search (orig_key=0x8071de0 "/mail/", val={n = 0,
      d = 0x4003b388}) at search.c:901
#9  0x8058b2c in factor (ignore=0xbfffe444) at parser.c:93
#10 0x8058c80 in term () at parser.c:140
#11 0x8058db5 in expr () at parser.c:182
#12 0x804c924 in search_sub (hlist={n = 335544320, d = 0x4003b388},
    query=0xbffff314 "/mail/", query_orig=0xbfffe504 "/mail/", n=0)
    at search.c:725
#13 0x804cc72 in search_main (query=0xbffff314 "/mail/") at search.c:837
#14 0x8049468 in main (argc=3, argv=0xbffff794) at libnmztest.c:45

参考: ccmalloc の出力

* 95.7% = 1.2 MB of garbage allocated in 200 allocations
|       |
|       |       0x4003578a in <???>
|       |
|       |       0x08049468 in <main>
|       |                  at libnmztest.c:45
|       |
|       |       0x0804cc72 in <search_main>
|       |                  at search.c:837
|       |
|       |       0x0804c924 in <search_sub>
|       |                  at search.c:725
|       |
|       |       0x08058db5 in <expr>
|       |                  at parser.c:182
|       |
|       |       0x08058c80 in <term>
|       |                  at parser.c:140
|       |
|       |       0x08058b2c in <factor>
|       |                  at parser.c:93
|       |
|       |       0x0804cf05 in <do_search>
|       |                  at search.c:907
|       |
|       |       0x0804b9a1 in <do_word_search>
|       |                  at search.c:274
|       |
|       |       0x0804af54 in <get_hlist>
|       |                  at hlist.c:475
|       |
|       |       0x0804ab2b in <malloc_hlist>
|       |                  at hlist.c:343
|       |
|       `-----> 0x08059983 in <malloc>
-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
        nokubi@xxxxxxxxx (official)