public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
* RE: cancelation problem
@ 1999-11-09 23:41 Erik Hensema
  0 siblings, 0 replies; 3+ messages in thread
From: Erik Hensema @ 1999-11-09 23:41 UTC (permalink / raw)
  To: egcs; +Cc: 'Pthreads-win32'

> -----Original Message-----
> From: Ross Johnson [ mailto:rpj@ise.canberra.edu.au ]

> The thread I want
> > to cancel has PTHREAD_CANCEL_ASYNCHRONOUS, however, this 
> piece of code
> > blocks on the join():
[...]
> > The thread recvThread seems to block on a select() call. It 
> doesn't get
> > cancelled.
>
[...]
> Pthreads-win32 doesn't support asynchronous cancelation, only
> deferred, which is also very limited. The reason there is no async
> cancelation is that it's very hard, if not impossible, to implement
> on top of Win32.

Ok, thank you for your explaination. I have solved the problem by adding a
timeout to the select() call, and looping it infinitely. The thread
cancelation now works as it should.

> 

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

* Re: cancelation problem
  1999-11-08  2:20 Erik Hensema
@ 1999-11-09 17:20 ` Ross Johnson
  0 siblings, 0 replies; 3+ messages in thread
From: Ross Johnson @ 1999-11-09 17:20 UTC (permalink / raw)
  To: Erik Hensema; +Cc: 'Pthreads-win32'

On Mon, 8 Nov 1999, Erik Hensema wrote:

> Hi,
> 
> I'm investigating a problem regarding thread cancelation. The thread I want
> to cancel has PTHREAD_CANCEL_ASYNCHRONOUS, however, this piece of code
> blocks on the join():
> 
> 		if ((retv = Pthread_cancel( recvThread )) == 0)
> 		{
> 			retv = Pthread_join( recvThread, 0 );
> 		}
> 
> Pthread_* are just macro's; they call pthread_*. 
> 
> The thread recvThread seems to block on a select() call. It doesn't get
> cancelled.
> 
> Two questions:
> 
> 1) is this normal behaviour? 
> 
> 2) if not, how does the cancel mechanism work? I'm not very familliar to
> win32 programming, so I don't really understand how the *Event() family of
> calls work.
> 

Hi Erik,

The answer to your first question is, normal POSIX behaviour would
be to asynchronously cancel the thread.

However ...

Pthreads-win32 doesn't support asynchronous cancelation, only
deferred, which is also very limited. The reason there is no async
cancelation is that it's very hard, if not impossible, to implement
on top of Win32.

Incidently, Butenhof "Programming with POSIX Threads"  recommends
not using async cancelation because the possible side effects are
unpredictable, especially if you're trying to write portable code.

Using deferred cancelation would normally be the way to go, however,
even though the POSIX threads standard lists a number of C library
functions that are defined as deferred cancelation points, there is
no hookup between those which are provided by Windows and the
pthreads-win32 library.

Incidently, it's worth noting for code portability that the POSIX
threads standard list doesn't include "select" because (as I read in
Butenhof) it isn't recognised by POSIX.

Effectively, the only cancelation points that pthreads-win32 can
recognise are those the library implements itself, ie.

	pthread_testcancel
	pthread_cond_wait
	pthread_cond_timedwait
	sem_wait

Hmmm, pthread_join should also be a cancelation point, but I see
that it isn't yet. That should be easy to fix.

Pthreads-win32 also provides two functions that allow you to create
cancelation points within your application, but only for cases where
a thread is going to block on a Win32 handle. These are:

	pthreadCancelableWait(HANDLE waitHandle) /* Infinite wait */

	pthreadCancelableTimedWait(HANDLE waitHandle, DWORD timeout)

Regards.
Ross

+----------------------+---+
| Ross Johnson         |   | E-Mail: rpj@ise.canberra.edu.au
| Info Sciences and Eng|___|
| University of Canberra   | FAX:    +61 6 2015227
| PO Box 1                 |
| Belconnen  ACT    2616   | WWW:    http://willow.canberra.edu.au/~rpj/
| AUSTRALIA                |
+--------------------------+



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

* cancelation problem
@ 1999-11-08  2:20 Erik Hensema
  1999-11-09 17:20 ` Ross Johnson
  0 siblings, 1 reply; 3+ messages in thread
From: Erik Hensema @ 1999-11-08  2:20 UTC (permalink / raw)
  To: 'Pthreads-win32'

Hi,

I'm investigating a problem regarding thread cancelation. The thread I want
to cancel has PTHREAD_CANCEL_ASYNCHRONOUS, however, this piece of code
blocks on the join():

		if ((retv = Pthread_cancel( recvThread )) == 0)
		{
			retv = Pthread_join( recvThread, 0 );
		}

Pthread_* are just macro's; they call pthread_*. 

The thread recvThread seems to block on a select() call. It doesn't get
cancelled.

Two questions:

1) is this normal behaviour? 

2) if not, how does the cancel mechanism work? I'm not very familliar to
win32 programming, so I don't really understand how the *Event() family of
calls work.

-- 
Erik Hensema
Work: erik.hensema@group2000.nl
Home: erik@hensema.xs4all.nl

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

end of thread, other threads:[~1999-11-09 23:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-11-09 23:41 cancelation problem Erik Hensema
  -- strict thread matches above, loose matches on Subject: below --
1999-11-08  2:20 Erik Hensema
1999-11-09 17:20 ` Ross Johnson

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).