Bug#673711: kfreebsd-9: pthread_cond_timedwait returns immediately with ETIMEDOUT

2012-05-20 Thread Nicolas Bourdaud
Package: kfreebsd-image-9.0-1-amd64
Version: 9.0-3
Severity: important
File: kfreebsd-9
Tags: upstream

Hi,

when using pthread_cond_timedwait, it often returns immediately with
the error ETIMEDOUT regardless to the length of the timeout passed to the
function. I have provided a C program that illustrates the problem.

It affects the upstream version (obtained by kfreebsd-downloader).
I have found a thread that, I believe, discusses about the issue:
http://freebsd.1045724.n5.nabble.com/pthread-cond-timedwait-broken-in-9-stable-from-JAN-10-td5487565.html

I would normally not report the bug since it seems already reported
upstream. However, I stumbled into this problem while I was trying to fix an
RC-bug (#673681) and according to the linked thread, there might be a small
patch that could fix the issue.

Thanks for considering the problem,

Cheers

Nicolas Bourdaud

-- System Information:
Debian Release: wheezy/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: kfreebsd-amd64 (x86_64)

Kernel: kFreeBSD 9.0-RELEASE
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/dash

Versions of packages kfreebsd-image-9.0-1-amd64 depends on:
ii  devd   9.0+ds1-4
ii  freebsd-utils  9.0+ds1-4
ii  kbdcontrol 9.0+ds1-4
ii  kldutils   9.0+ds1-4

kfreebsd-image-9.0-1-amd64 recommends no packages.

kfreebsd-image-9.0-1-amd64 suggests no packages.

-- no debconf information
#include stdio.h
#include pthread.h
#include errno.h
#include time.h
#include stdlib.h

#define DELTA	4	//400ms
#define NS_PER_MS	100
#define NS_PER_SEC	10

void addtime(struct timespec* res, struct timespec* ref, long delta)
{
	res-tv_sec = ref-tv_sec;
	res-tv_nsec = ref-tv_nsec + delta;
	if (res-tv_nsec = NS_PER_SEC) {
		res-tv_nsec -= NS_PER_SEC;
		res-tv_sec++;
	}
}

int main(void)
{
	int i;
	struct timespec ts, to;
	pthread_mutex_t lock;
	pthread_cond_t cond;

	pthread_mutex_init(lock, NULL);
	pthread_cond_init(cond, NULL);

	for (i=0; i10; i++) {
		clock_gettime(CLOCK_REALTIME, ts);
		printf(start: sec:%li  msec:%li\n, (long)ts.tv_sec, ts.tv_nsec/NS_PER_MS);
		
		addtime(to, ts, DELTA);

		pthread_mutex_lock(lock);
		while (pthread_cond_timedwait(cond, lock, to) != ETIMEDOUT);
		pthread_mutex_unlock(lock);

		clock_gettime(CLOCK_REALTIME, ts);
		printf(end: sec:%li  msec:%li\n, (long)ts.tv_sec, ts.tv_nsec/NS_PER_MS);
	}

	pthread_mutex_destroy(lock);
	pthread_cond_destroy(cond);

	return EXIT_SUCCESS;
}


Bug#673711: kfreebsd-9: pthread_cond_timedwait returns immediately with ETIMEDOUT

2012-05-20 Thread Christoph Egger
Hi!

Nicolas Bourdaud nicolas.bourd...@gmail.com writes:
   when using pthread_cond_timedwait, it often returns immediately with
 the error ETIMEDOUT regardless to the length of the timeout passed to the
 function. I have provided a C program that illustrates the problem.

   It affects the upstream version (obtained by kfreebsd-downloader).
 I have found a thread that, I believe, discusses about the issue:
 http://freebsd.1045724.n5.nabble.com/pthread-cond-timedwait-broken-in-9-stable-from-JAN-10-td5487565.html

   I would normally not report the bug since it seems already reported
 upstream. However, I stumbled into this problem while I was trying to fix an
 RC-bug (#673681) and according to the linked thread, there might be a small
 patch that could fix the issue.

Thanks for your bug report!

I'm a bit skeptical hoqwever that this build failure is caused by a
kernel bug in kfreebsd-9 ad the buildds (where this build failure
happens) are running an 8.1 kernel which (according to the linked
thread) is not affected.

However there was (IIRC) indeed some change in pthread/libc code
recently that might cause this issue.

Regards

Christoph

-- 
9FED 5C6C E206 B70A 5857  70CA 9655 22B9 D49A E731
Debian Developer | Lisp Hacker | CaCert Assurer



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org