[complement-svn] SF.net SVN: complement: [1852] trunk/complement/explore
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2008-04-23 09:20:26
|
Revision: 1852 http://complement.svn.sourceforge.net/complement/?rev=1852&view=rev Author: complement Date: 2008-04-23 02:20:23 -0700 (Wed, 23 Apr 2008) Log Message: ----------- take thread's id into fake variable and keep _id as bad_thread_id Modified Paths: -------------- trunk/complement/explore/include/mt/thread trunk/complement/explore/lib/mt/ChangeLog Modified: trunk/complement/explore/include/mt/thread =================================================================== --- trunk/complement/explore/include/mt/thread 2008-04-23 06:23:55 UTC (rev 1851) +++ trunk/complement/explore/include/mt/thread 2008-04-23 09:20:23 UTC (rev 1852) @@ -248,16 +248,15 @@ _stack_on_create = s.str(); } #endif - int err = pthread_create( &this->_id, F != 0 || S != 0 ? &attr : 0, &_call<Entry>, this ); + native_handle_type _id_tmp; + int err = pthread_create( (F & detached) != 0 ? &_id_tmp : &this->_id, F != 0 || S != 0 ? &attr : 0, &_call<Entry>, this ); if ( err != 0 ) { - // _id = id(); -- not required, already set + // _id = id(); -- not required, already set if required delete static_cast<Entry *>(_entry); if ( F & detached ) { // reset condition (_entry free, ready for delete) _entry = 0; } - } else if ( F & detached ) { - _id = id()._id; } if ( F != 0 || S != 0 ) { pthread_attr_destroy( &attr ); @@ -298,17 +297,16 @@ _stack_on_create = s.str(); } #endif - int err = pthread_create( &this->_id, F != 0 || S != 0 ? &attr : 0, &_call<Entry,Arg1>, this ); + native_handle_type _id_tmp; + int err = pthread_create( (F & detached) != 0 ? &_id_tmp : &this->_id, F != 0 || S != 0 ? &attr : 0, &_call<Entry,Arg1>, this ); if ( err != 0 ) { - // _id = id(); -- not required, already set + // _id = id(); -- not required, already set if required delete static_cast<Arg1 *>( static_cast<void **>(_entry)[1] ); delete static_cast<Entry *>( static_cast<void **>(_entry)[0] ); delete [] static_cast<void **>(_entry); if ( F & detached ) { _entry = 0; // reset condition (_entry free, ready for delete) } - } else if ( F & detached ) { - _id = id()._id; } if ( F != 0 || S != 0 ) { pthread_attr_destroy( &attr ); Modified: trunk/complement/explore/lib/mt/ChangeLog =================================================================== --- trunk/complement/explore/lib/mt/ChangeLog 2008-04-23 06:23:55 UTC (rev 1851) +++ trunk/complement/explore/lib/mt/ChangeLog 2008-04-23 09:20:23 UTC (rev 1852) @@ -1,3 +1,9 @@ +2008-04-23 Petr Ovtchenkov <pt...@is...> + + * thread: fix access to thread's _id in case of detached thread; + really take thread's id into fake variable and keep _id as + bad_thread_id. + 2008-03-26 Petr Ovtchenkov <pt...@is...> * mutex: add rw_mutex_ip typedef; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |