From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23079 invoked by alias); 31 May 2002 05:32:19 -0000 Mailing-List: contact pthreads-win32-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sources.redhat.com Received: (qmail 23055 invoked from network); 31 May 2002 05:32:18 -0000 Received: from unknown (HELO digit.ise.canberra.edu.au) (137.92.140.41) by sources.redhat.com with SMTP; 31 May 2002 05:32:18 -0000 Received: from ise.canberra.edu.au (localhost.localdomain [127.0.0.1]) by digit.ise.canberra.edu.au (8.11.6/8.11.6) with ESMTP id g4V5W0l02340; Fri, 31 May 2002 15:32:01 +1000 Message-ID: <3CF70ACF.902@ise.canberra.edu.au> Date: Thu, 30 May 2002 22:32:00 -0000 From: Ross Johnson Organization: University of Canberra, Information Sciences and Engineering User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020513 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "Bossom, John" CC: "'Rob Fanner'" , pthreads-win32@sources.redhat.com Subject: Re: semaphores References: <430F887D415DD1118C2700805F31ECF106B591B1@sota0005.cognos.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2002/txt/msg00070.txt.bz2 Hi John/Rob, Bossom, John wrote: > sem_getvalue()? > > I don't see that in the standard (POSIX.1b (POSIX 1003.1b-1993))... I > assume this has been added to the pthreads-win32 implementation > as an extension (Ross?) This function is noted by the contributor in the ChangeLog as a 'trial' version. It appears to be defined according to the Single Unix Specification version 2 (as noted by other respondents):- http://www.opengroup.org/onlinepubs/7908799/xsh/sem_getvalue.html This definition is different to the latest POSIX standard IEEE Std 1003.1-200x (I'm looking at draft 7), which removes ENOSYS from the list of returnable errors for this function. I don't know if that means that it must not return ENOSYS. > > Perhaps there is a bug in that new method. > The following comment and code is pretty much all there is to the function: /* Note: * The windows NT documentation says that the increment must be * greater than zero, but it is set to zero here. If this works, * the function will return true. If not, we can't do it this way * so flag it as not implemented. */ if ( ReleaseSemaphore( (*sem)->sem, 0L, &value) ) { *sval = value; } else { result = ENOSYS; } There's no test in the current test suite for this routine (will do though). And the routine would seem to need to be rewritten. Regards. Ross > > > However, try looping over sem_trywait and count the # of times it > returns 0. It should return EAGAIN > > when the semaphore count is zero. > > > > Sorry, I can't help you with the sem_getvalue.... > > > > Note that since the sem_ calls are from an earlier standard, that when > they fail they are supposed > > to return -1 and set errno to the actual error number.... > > > > John. > > -----Original Message----- > *From:* Rob Fanner [mailto:rfanner@stonethree.com] > *Sent:* May 30, 2002 10:10 AM > *To:* pthreads-win32@sources.redhat.com > *Subject:* semaphores > > I'm new to using pthreads-win32 (SNAPSHOT 2002-03-02), and I have to > port > > a program from Linux to Windows 2000. A bug has somehow crept into my > > code, and I've narrowed the problem area down to a code fragment > similar > > to the following: > > > > #include > #include > #include > > > > using namespace std; > > > > int main() > { > /** > * We want to check wether a semaphore can be initialised > * with a value. > */ > > // a semaphore > sem_t psem; > > > > // initialise it with value 10 > assert(sem_init(&psem,0,10) == 0); // > ASSERT NO 1 > // if the semaphore initialisation was ok, the sem > // should now have the value 10 > int ret = 0; > assert(sem_getvalue(&psem,&ret) == 0); // ASSERT NO 2 > // if no errors occured then value is now in the > // integer ret > cout << endl << "sem_getvalue() returns value " << ret << endl << > flush; > > return 0; > } > > > > I'm using MS VC++ 6.0, and I'm linking with the precompiled > pthreadVCE.lib library. > > At runtime, the first assert() passes OK, but second fails. > > I have no idea why this fails (hopefully it's simply a newby error, > and not a bug in > > the pthreads-win32 lib), but it does. > > > > Thanks > > Rob > > > This message may contain privileged and/or confidential information. If > you have received this e-mail in error or are not the intended > recipient, you may not use, copy, disseminate or distribute it; do not > open any attachments, delete it immediately from your system and notify > the sender promptly by e-mail that you have done so. Thank you. > -- +-------------------------+---+ | Ross Johnson | | "Come down off the cross | Management & Technology |___| We can use the wood" - Tom Waits | Building 11 | | University of Canberra | eMail: rpj@ise.canberra.edu.au | ACT 2601 | WWW: http://public.ise.canberra.edu.au/~rpj/ | AUSTRALIA | +-----------------------------+