What reasons are known a thread stops suddenly?

tcak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Feb 4 19:47:40 PST 2016


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?


More information about the Digitalmars-d-learn mailing list