Yahoo Groups archive

Milter-greylist

Index last updated: 2026-04-28 23:32 UTC

Message

libpthread: Invalid condition variable

2009-09-11 by Petar Bogdanovic

Hi,

I just tried to catch up on our NetBSD 4.0 (i386) box, upgraded from 4.1.10 to
4.3.3 and got this:

	# gdb /usr/pkg/bin/milter-greylist
	(...)
	(gdb) run
	Starting program: /usr/pkg/bin/milter-greylist
	(...)
	milter-greylist: Error detected by libpthread: Invalid condition variable.
	Detected by file "pthread_cond.c", line 283, function "pthread_cond_signal".
	See pthread(3) for information.

	Program received signal SIGABRT, Aborted.
	0xbbaf922f in kill () from /usr/lib/libc.so.12
	(gdb) bt
	#0  0xbbaf922f in kill () from /usr/lib/libc.so.12
	#1  0xbbbe3dcb in pthread__errorfunc () from /usr/lib/libpthread.so.0
	#2  0xbbbe36f3 in pthread_cond_signal () from /usr/lib/libpthread.so.0
	#3  0x080598d3 in dump_conf_changed ()
	#4  0x0805960a in conf_load_internal ()
	#5  0x080597bf in conf_load ()
	#6  0x0804dd87 in main ()

pthread_cond_signal takes {dump,sync}_sleepflag:

	# grep -r pthread_cond_signal milter-greylist-4.3.3
	#
	dump.c:        if ((error = pthread_cond_signal(&dump_sleepflag)) != 0) {
	dump.c:        pthread_cond_signal(&dump_sleepflag);
	dump.c:        pthread_cond_signal(&dump_sleepflag);
	sync.c:        if ((error = pthread_cond_signal(&sync_sleepflag)) != 0) {

	# egrep -r '(dump|sync)_sleepflag' milter-greylist-4.3.3
	#
	dump.c:static pthread_cond_t dump_sleepflag;
	dump.c:        if ((error = pthread_cond_init(&dump_sleepflag, NULL)) != 0) {
	dump.c:                                error = pthread_cond_timedwait(&dump_sleepflag,
	dump.c:                                error = pthread_cond_wait(&dump_sleepflag,
	dump.c:        if ((error = pthread_cond_signal(&dump_sleepflag)) != 0) {
	dump.c:        pthread_cond_signal(&dump_sleepflag);
	dump.c:        pthread_cond_signal(&dump_sleepflag);
	sync.c:static pthread_cond_t sync_sleepflag = PTHREAD_COND_INITIALIZER;
	sync.c:        if ((error = pthread_cond_signal(&sync_sleepflag)) != 0) {
	sync.c:                        pthread_cond_wait(&sync_sleepflag, &sync_dirty_lock);

Any ideas?



   Petar Bogdanovic

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.