Skip site navigation (1)Skip section navigation (2)
Date:      Thu,  2 Dec 1999 11:13:24 -0700 (MST)
From:      rcarter@pinyon.org
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   misc/15228: C++ exceptions+threads fail
Message-ID:  <19991202181324.CCF5456@pinyon.org>

next in thread | raw e-mail | index | archive | help

>Number:         15228
>Category:       misc
>Synopsis:       C++ exceptions+threads SIGABRTs.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Dec  2 10:20:01 PST 1999
>Closed-Date:
>Last-Modified:
>Originator:     Russell L. Carter
>Release:        FreeBSD 4.0-CURRENT i386
>Organization:
Conceptual Systems & Software
>Environment:

	standard -current

>Description:

	Throwing a c++ exception across threads causes core dump.

>How-To-Repeat:

$ c++ -pthread -D_THREAD_SAFE ex_test.cpp
$ ./a.out
Throwing Ex:
Caught Ex, now rethrowing it...
Caught Ex thrown from main thread.
Throwing Ex:
Caught Ex, now rethrowing it...
Abort trap (core dumped)
$

ex_test.cpp:

#include <stdio.h>
#include <pthread.h>

class Ex {};

class testEx {
public:
  void throwEx () {
    fprintf(stderr, "Throwing Ex:\n");
    throw Ex (); 
  }
};

void *
f(void *)
{
  testEx thetest;
  thetest.throwEx ();
}

void *
g(void *arg) 
{  
  try {
    f(arg);
  } catch (Ex &ex) {
    fprintf(stderr, "Caught Ex, now rethrowing it...\n");
    throw;
  }
}

int
main (void)
{
  int *arg = 0;
  
  try {
    g((void *) arg);
  } catch (Ex &ex) {
    fprintf(stderr, "Caught Ex thrown from main thread.\n");
  }
  
  pthread_t ex_thread;
  pthread_attr_t *attr = 0;
  
  try {
    pthread_create(&ex_thread, attr, g, (void *) arg);
  } catch (Ex &ex) {
    fprintf(stderr, "Caught Ex thrown from child thread.\n");
  }
  pthread_join(ex_thread, (void **) &arg);
  
  return 0;
}


>Fix:

None yet.


>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19991202181324.CCF5456>