public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
* RE: Problem in pthread_cancel() ?
@ 2000-09-06  8:21 Bossom, John
  2000-09-06 17:38 ` Ross Johnson
  0 siblings, 1 reply; 3+ messages in thread
From: Bossom, John @ 2000-09-06  8:21 UTC (permalink / raw)
  To: 'Ollie Leahy', pthreads-win32

I believe the original implementation would create an instance
of a pthread struct for you... (and it should) thus allowing
you to use pthread calls against your current "thread" of execution
such as the main process (note: the "process" is simply the
initial thread). This would eliminate the need to create
an explicit pthread in order to do these kind of pthread calls


The mechanism I would recommend is "pthread_self" should boot-strap
an instance of the pthread struct to the current thread of execution
if you are not within a thread explicitly created with pthread_create.

I don't know how the current implementation is getting "self" (I assume
it is from thread-specific memory) however, I recommend that "self"
be retrieved using pthread_self().  My original implementation DID
bind an instance of the pthread struct the calling thread if not
explicitly created with pthread

-----Original Message-----
From: Ollie Leahy [ mailto:ollie@mpt.ie ]
Sent: Wednesday, September 06, 2000 4:33 AM
To: pthreads-win32@sources.redhat.com
Subject: Problem in pthread_cancel() ?




	I don't know whether I am mis-using	pthreads or if 
	there is a problem in the pthreads-win32 implementation.

	When my process is closing down I want all pthreads
	to complete before I finally return from the process.
	To do this I send a pthread_cancel() to those threads
	that are blocking (on an accept() or a recv() call)
	on Linux this works but with pthread-win32 if I call
	pthread_cancel() from the main process the process
	core dumps. If I create a thread and call cancel()
	from the thread then everything works fine.

	I had a quick look at the code for pthread_cancel() and
	the problem seems to be that pthread_cancel() tests
	whether it is being called to cancel the calling thread
	and references the variable 'self'. But since I call the
	function from the process and not from a thread self
	is NULL, so as soon as self is dereferenced the process
	crashes. 

	I have fixed my problem by creating a thread to call
	cancel, and I've also hacked the pthread-win32 code 
	so that if self is NULL pthread_cancel() does not
	try to defreference it.  I would like to know whether
	I'm trying to do something illegal as far as pthreads
	are concerned or whether there is a bug in the win32 
	implementation.

	Regards,
	Ollie

^ permalink raw reply	[flat|nested] 3+ messages in thread
* Problem in pthread_cancel() ?
@ 2000-09-06  1:32 Ollie Leahy
  0 siblings, 0 replies; 3+ messages in thread
From: Ollie Leahy @ 2000-09-06  1:32 UTC (permalink / raw)
  To: pthreads-win32

	I don't know whether I am mis-using	pthreads or if 
	there is a problem in the pthreads-win32 implementation.

	When my process is closing down I want all pthreads
	to complete before I finally return from the process.
	To do this I send a pthread_cancel() to those threads
	that are blocking (on an accept() or a recv() call)
	on Linux this works but with pthread-win32 if I call
	pthread_cancel() from the main process the process
	core dumps. If I create a thread and call cancel()
	from the thread then everything works fine.

	I had a quick look at the code for pthread_cancel() and
	the problem seems to be that pthread_cancel() tests
	whether it is being called to cancel the calling thread
	and references the variable 'self'. But since I call the
	function from the process and not from a thread self
	is NULL, so as soon as self is dereferenced the process
	crashes. 

	I have fixed my problem by creating a thread to call
	cancel, and I've also hacked the pthread-win32 code 
	so that if self is NULL pthread_cancel() does not
	try to defreference it.  I would like to know whether
	I'm trying to do something illegal as far as pthreads
	are concerned or whether there is a bug in the win32 
	implementation.

	Regards,
	Ollie

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2000-09-06 17:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-09-06  8:21 Problem in pthread_cancel() ? Bossom, John
2000-09-06 17:38 ` Ross Johnson
  -- strict thread matches above, loose matches on Subject: below --
2000-09-06  1:32 Ollie Leahy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).