• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: pthread_cancel()
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: pthread_cancel()


  • Subject: Re: pthread_cancel()
  • From: Matt Watson <email@hidden>
  • Date: Tue, 30 May 2006 08:21:39 -0700


On May 30, 2006, at 4:54 AM, Per Mildner wrote:

On 8-May-06, at 16:08 , Matt Watson wrote:
On May 8, 2006, at 12:59 PM, Andre-John Mas wrote:
> > > On May 8, 2006, at 12:45 PM, Andre-John Mas wrote:
> >
> > > Could anyone tell me whether pthread_cancel() is planned to be
> > > implemented properly in a future version of Darwin? From what I
> > > understand the current implementation does not conform to the
> > > posix implementation.
> > > > > If you compile with _APPLE_C_SOURCE, _POSIX_C_SOURCE or
> > _XOPEN_SOURCE, the implementation should behave as you want.
> > > > Thanks. Just one question are these for my applications or for
> compiling the kernel?

This is when compiling user-level programs.
matt.

What exectly is supposed to change when setting _APPLE_C_SOURCE? I realize that this causes a new version of pthread_cancel to be called. However, the real problem is that the POSIX mandated thread cancellation points are missing, e.g. in read and write.

As you point out, a different version of certain pthread routines is used when _APPLE_C_SOURCE is set.


I can't reproduce what you are seeing. Do you have a self-contained source example exhibiting the problem?

The following program works properly when built with _APPLE_C_SOURCE on 10.4.6:

#include <assert.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static int exit_status = EXIT_FAILURE;

void *
func(void *arg)
{
        char buf;

        exit_status = EXIT_SUCCESS;

        read(STDIN_FILENO, &buf, 1);

        return NULL;
}

int
main(void)
{
        pthread_t t;
        void *retval;

        assert(!pthread_create(&t, NULL, func, NULL));
        assert(!pthread_cancel(t));
        assert(!pthread_join(t, &retval));
        assert(PTHREAD_CANCELED == retval);

        return exit_status;
}

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: pthread_cancel()
      • From: "Per Mildner" <email@hidden>
References: 
 >Re: pthread_cancel() (From: "Per Mildner" <email@hidden>)

  • Prev by Date: Re: pthread_cancel()
  • Next by Date: Re: pthread_cancel()
  • Previous by thread: Re: pthread_cancel()
  • Next by thread: Re: pthread_cancel()
  • Index(es):
    • Date
    • Thread