What reasons are known a thread stops suddenly?

Daniel Kozak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Feb 4 22:23:09 PST 2016


V Fri, 05 Feb 2016 03:47:40 +0000
tcak via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com>
napsáno:

> On Thursday, 4 February 2016 at 22:27:31 UTC, Ali Çehreli wrote:
> > On 02/04/2016 12:25 PM, tcak wrote:
> >  
> > > void threadFunc(){
> > >      scope(exit){
> > >          writeln("Leaving 2: ", stopRequested);
> > >      }
> > >
> > >
> > >      while( !stopRequested ){
> > > /* THERE IS NO "RETURN" HERE AT ALL */
> > >      }
> > >
> > >      writeln("Leaving 1: ", stopRequested);
> > > }
> > >
> > >
> > >
> > > While loop is running, suddenly "Leaving 2: false" is seen.  
> >
> > That would happen when there is an exception.
> >  
> > > Checked with
> > > exception, but there is nothing.  
> >
> > If a thread is terminated with an exception, its stack is 
> > unwound and unlike the main thread, the program will not 
> > terminate. I think this is due to an exception.
> >  
> > > GDB doesn't show any error.  
> >
> > I think putting a break point at exception construction would 
> > be helpful but it will be simpler to put a try-catch block that 
> > covers the entire body of threadFunc().
> >  
> > > There is no
> > > "Leaving 1: .." message at all.
> > >
> > > Is there any known reason for a thread to suddenly stop like  
> > this?
> >
> > I am still betting on an exception. :)
> >
> > Ali  
> 
> Yup, it is exception it seems like, but with a weird result. 
> Check the new codes:
> 
> void threadFunc(){
> 	scope(exit){
> 		writeln("Leaving 2: ", stopRequested);
> 	}
> 
> 	scope(failure){
> 		writeln("Failure");
> 	}
> 
> 	try{
> 		while( !stopRequested ){
> 
> 		}
> 
> 		writeln("Leaving 1: ", stopRequested);
> 	}
> 	catch( Exception ex ){
> 		writeln("Caught the exception");
> 	}
> }
> 
> Now, the thread stops with:
> 
> Failure
> Leaving 2: false
> 
> 
> There is no "Caught the exception". And believe me other then the 
> codes inside while loop, main structure as seen in the above code.
> 
> By testing many times, I understood that the problem occurs when 
> too many requests are received suddenly (by pressing F5 many 
> times again and again produces the exception).
> 
> But the question is why try-catch is not able to catch it, and 
> just scope(failure) can?

Did you try catch Throwable instead of Exception?



More information about the Digitalmars-d-learn mailing list