Actions

icon Post
text/html Subscribe
text/html Unsubscribe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Does the cancelation exception have a name?


  • To: "c++-pthreads" <c++-pthreads@xxxxxxxxxxxxxxxx>
  • Subject: Does the cancelation exception have a name?
  • From: "Peter Dimov" <pdimov@xxxxxxxxx>
  • Date: Wed, 1 Nov 2006 21:18:46 +0200

Under the current NPTL implementation, can the cancelation exception be caught by name (and then rethrown)? If not, are there problems (technical or otherwise) with giving it a name so it can be caught?

Motivating example 1:

extern "C" int f() // C API, cancelation point
{
   try
   {
       cpp_implementation();
       return 0; // success
   }
   catch( cancel_exception )
   {
       throw;
   }
   catch( bad_alloc )
   {
       return ENOMEM;
   }
   catch( ... )
   {
       return -1;
   }
}

This is a function with a C interface and a C++ implementation. It translates all C++ exceptions into error codes, but the cancelation exception is special and needs to be rethrown, or else.

Motivating example 2:

void threadproc()
{
   try
   {
       store_result( user_function() );
   }
   catch( cancel_exception )
   {
       // record that the user task has been canceled
       throw;
   }
   catch( ... )
   {
       // record that the task terminated with an exception
   }
}

Here a user task is executed in a thread, and its result (which can be of an arbitrary type) is stored for later use. This enables usage of the form:

future<int> f = call_in_thread( user_function );

// do something to exploit parallelism

int r = f.get();

If the cancelation exception is and will remain unnamed, is it possible to provide a way to detect, in a catch( ... ) clause, whether the current exception is a cancelation exception? Something like

bool is_cancel_exception();

could also allow the two use patterns above.

Thanks in advance for any replies or comments.