[omniORB] omni_thread join problem - leads to core dump
Bruce Visscher
bruce.visscher at gmail.com
Tue Jun 8 17:55:47 BST 2010
Christoph,
This is pretty easy.
void start(void);
// start() causes a thread created with one of the constructors to
// start executing the appropriate function.
...
void start_undetached(void);
// can be used with the above constructor in a derived class to cause
// the thread to be undetached. In this case the thread executes the
// run_undetached member function.
...
void join(void**);
// join causes the calling thread to wait for another's completion,
// putting the return value in the variable of type void* whose address
// is given (unless passed a null pointer). Only undetached threads
// may be joined. Storage for the thread will be reclaimed.
so, you tried to join a detached thread. You can't do that. What you
basically do with a detached thread is somehow "signal" it to shut down
then trust that it will.
(Having said that, I really dislike the word "undetached". I would have
preferred that they used "detached" vs "managed" or something like that.
Of course, maybe the terminology came from the POSIX standard...)
HTH,
Bruce
On Tue, Jun 8, 2010 at 4:37 PM, Christoph Becker
<tuergeist at googlemail.com> wrote:
>
> Hi,
>
> I don't know if I'm right or not, but omni thread IMHO is more or less
> a part of omniorb.
> So I have the problem that a join() always results in a core dump
> after throwing an omni_thread_invalid.
>
> ...
> MyT* t = new MyT;
> t->start();
>
> /* won't work
> * -> terminate called after throwing an instance of 'omni_thread_invalid'
> */
> int * rv;
> t->join((void**) &rv); // <- breaks here
>
> The complete minimal resides @ http://tinypaste.com/55592
>
> Any help is welcome.
>
> Cheers,
> Christoph
>
> _______________________________________________
> omniORB-list mailing list
> omniORB-list at omniorb-support.com
> http://www.omniorb-support.com/mailman/listinfo/omniorb-list
More information about the omniORB-list
mailing list