This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Found problem in Thread class implementation
- From: "Richard Rauch" <rrauch at itrgmbh dot de>
- To: <ecos-discuss at ecos dot sourceware dot org>
- Date: Thu, 23 May 2013 12:49:47 +0200
- Subject: Found problem in Thread class implementation
Hi,
maybe I found a problem in schedulers code....
For debugging purposes I enabled some options:
- CYGVAR_KERNEL_THREADS_LIST
- CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
On application startup some threads should be created, but I am running in
an exception. The reason of exception is located here:
inline void
Cyg_Thread::add_to_list( void )
{
// Add thread to housekeeping list
Cyg_Scheduler::lock();
if( thread_list == 0 )
list_next = this;
else {
Cyg_Thread *prev = thread_list;
do {
if ( this == prev )
break; // found it already!
prev = prev->list_next;
} while ( prev != thread_list );
if ( this != prev ) {
// insert it in the list:
list_next = thread_list->list_next;
thread_list->list_next = this;
}
}
thread_list = this;
Cyg_Scheduler::unlock();
}
In this loop prev becomes NULL, but there is no test on NULL, so the
statement <NULL>->list_next causes an exception!
Should there a test on NULL pointer only? I do not understand the reason for
while loop condition: while (prev != thread_list). Should I compare to NULL
here or is it more complex?
Thanks
Richard
ITR GmbH
web: http://www.itrgmbh.com
email: info@itrgmbh.com
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss