From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22913 invoked by alias); 24 May 2013 05:13:25 -0000 Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Received: (qmail 22887 invoked by uid 89); 24 May 2013 05:13:17 -0000 X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from relay01.alfahosting-server.de (HELO relay01.alfahosting-server.de) (109.237.142.236) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Fri, 24 May 2013 05:13:15 +0000 Received: by relay01.alfahosting-server.de (Postfix, from userid 1001) id D164E32C01EA; Fri, 24 May 2013 07:13:12 +0200 (CEST) X-Spam-DCC: : Received: from alfa3017.alfahosting-server.de (alfa3017.alfahosting-server.de [109.237.140.28]) by relay01.alfahosting-server.de (Postfix) with ESMTP id 2C31632C00E3; Fri, 24 May 2013 07:13:10 +0200 (CEST) Received: from itrrrauch (p578a450a.dip0.t-ipconnect.de [87.138.69.10]) by alfa3017.alfahosting-server.de (Postfix) with ESMTPA id D181A293479E; Fri, 24 May 2013 07:13:09 +0200 (CEST) From: "Richard Rauch" To: "'Nick Garnett'" , References: <001701ce57a3$3e98cc50$bbca64f0$@itrgmbh.de> <519E2A17.2090700@calivar.com> In-Reply-To: <519E2A17.2090700@calivar.com> Date: Fri, 24 May 2013 05:13:00 -0000 Message-ID: <005901ce583d$66f0f5c0$34d2e140$@itrgmbh.de> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Virus-Checker-Version: clamassassin 1.2.4 with ClamAV 0.97.3/17264/Thu May 23 18:12:25 2013 Subject: AW: [ECOS] Found problem in Thread class implementation X-SW-Source: 2013-05/txt/msg00047.txt.bz2 Strange, when I disable CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT, everything works fine! Ok, I will further debug this issue Richard > > > On 23/05/13 11:49, Richard Rauch wrote: > > 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 ->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? > > There should never be a NULL pointer in that list, it is a circular chain through > all the current threads, in no particular order, mainly just for housekeeping. It's > main use is in the GDB stubs to implement the thread support operations. > > If thread_list is NULL, the thread is just added on its own. In the else, the > do..while() looks for the current thread in the list and breaks if found. The > following if() adds the thread only if it was not found. This part allows > add_to_list() to be called more than once for any thread; although I forget > where or why this might happen. > > If a NULL pointer appears here then the cause usually lies elsewhere. I have > seen it most often on thread stack overflow which writes over its own thread > object. But any memory corruption problem could cause this to happen. > > > -- > Nick Garnett Kernel Architect > eCosCentric Limited http://www.eCosCentric.com The eCos experts > Barnwell House, Barnwell Drive, Cambridge, UK. Tel: +44 1223 245571 > Registered in England and Wales: Reg No: 4422071 > > -- > Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos > and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss