NetBSD Problem Report #41645

From www@NetBSD.org  Sun Jun 28 17:50:19 2009
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by www.NetBSD.org (Postfix) with ESMTP id EFA4463B976
	for <gnats-bugs@gnats.netbsd.org>; Sun, 28 Jun 2009 17:50:18 +0000 (UTC)
Message-Id: <20090628175018.8EF3663B946@www.NetBSD.org>
Date: Sun, 28 Jun 2009 17:50:18 +0000 (UTC)
From: ekamperi@gmail.com
Reply-To: ekamperi@gmail.com
To: gnats-bugs@NetBSD.org
Subject: pthread_cond_timedwait(3) doesn't timeout if NULL is given as abstime argument
X-Send-Pr-Version: www-1.0

>Number:         41645
>Category:       lib
>Synopsis:       pthread_cond_timedwait(3) doesn't timeout if NULL is given as abstime argument
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Jun 28 17:55:00 +0000 2009
>Originator:     Stathis Kamperis
>Release:        NetBSD 5.0_STABLE
>Organization:
Aristotle University of Thessaloniki
>Environment:
NetBSD voyager 5.0_STABLE NetBSD 5.0_STABLE (MYGENERIC) #6: Fri Jun 26 22:50:50 EEST 2009  root@voyager:/usr/obj/sys/arch/i386/compile/MYGENERIC i386

>Description:
The pthread_cond_timedwait(3) functions waits perpetually if `NULL' is supplied as `abstime' argument. POSIX (issue 6) says that if an invalid timeout is given, EINVAL should be returned immediately. Issue 7, doesn't talk about invalid timeout, it just gives a valid range.

According to my understanding, a programmer using pthread_cond_timedwait(3) would want the call to timeout at some point. So if by mistake provides a NULL timeout, what's the least surprise thing we could do ? Error or block indefinitely ?

I realize that my argument is flammable. So even if you expect the programmer to always do the right thing or the current state is a conscious design that I miss, could you please document this behavior in pthread_cond_timedwait(3) man page ?


Best regards,
Stathis


>How-To-Repeat:


#include <assert.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
        pthread_cond_t cond;
        pthread_mutex_t mtx;
        struct timespec abstime;

        /* Create a condition variable with default attributes. */
        assert(pthread_cond_init(&cond, NULL) == 0);

        /* Initialize mutex. */
        assert(pthread_mutex_init(&mtx, NULL) == 0);

        /* Acquire lock. */
        assert(pthread_mutex_lock(&mtx) == 0);

        assert(pthread_cond_timedwait(&cond, &mtx, NULL) == EINVAL);

        /* Release lock. */
        assert(pthread_mutex_unlock(&mtx) == 0);

        /* Cleanup. */
        assert(pthread_cond_destroy(&cond) == 0);
        assert(pthread_mutex_destroy(&mtx) == 0);

        printf("passed\n");

        return (EXIT_SUCCESS);
}

>Fix:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.