2011-11-18 5 views
10

で作業する場合、そのようなこの一つとして、スレッドに参加する「可能性が失われた」メモリを報告しますそれは、「おそらく失われた」記憶を報告します。 join()を省略すると、これは論理的です。その場合、プログラムが終了してもスレッドはまだ実行されているためです。しかし、スレッドが終了した場合、私は警告がないことを期待します。ここで Valgrindのは、私は別のtheradで何らかのアクションを実行するプログラムを持ってブーストスレッド

はバックトレースです:

==8797== 288 bytes in 1 blocks are possibly lost in loss record 2 of 3 
==8797== at 0x4A1F8B3: calloc (vg_replace_malloc.c:467) 
==8797== by 0x400F289: allocate_dtv (in /lib64/ld-2.4.so) 
==8797== by 0x400F34D: _dl_allocate_tls (in /lib64/ld-2.4.so) 
==8797== by 0x53EF981: [email protected]@GLIBC_2.2.5 (in /lib64/libpthread-2.4.so) 
==8797== by 0x4B3311D: boost::thread::start_thread() (in /home/egbomrt/BOOST/inst_1_47_0/lib/libboost_thread.so.1.47.0) 
==8797== by 0x40A20C: boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type) (thread.hpp:204) 
==8797== by 0x406295: main (main.cpp:12) 

これはブーストスレッド、POSIXスレッドの問題ですか、これは完全に正常ですか?私はそれのための抑制ルールを作成することができますが、未完了のスレッドがある場合は警告が表示されますが、すべてのスレッドが終了した場合は表示されません。

+3

自分でphtreadを削除することができます(ブーストなしでpthread_create/pthread_joinを使用するだけで) – sehe

+2

GCC4.6.2 /ブースト1.48で再現できません。しかし、私は1ブロック "まだ到達可能"で8バイトを取得します。ちなみに、Boostの代わりに ''で完全に正常に動作します。 –

+0

@sehe:スタックトレースから判断すると、ブーストとは関係ありません。 pthread_create()はTLSの構造を割り当てます。 http://www.akkadia.org/drepper/tls.pdfを参照してください。 –

答えて

4

問題がpthreadライブラリであることがわかりました。 SUSE 10でプログラムを実行するとメモリリークが発生しますが、SUSE 11で実行すると問題は発生しません。

Boostの有無にかかわらず同じ結果が得られます。

コメントありがとうございます。それは私が問題を突き止めるのを助けました。

関連する問題