octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: interrupt handing and the GUI (bug #37672)


From: Daniel J Sebald
Subject: Re: interrupt handing and the GUI (bug #37672)
Date: Mon, 11 Nov 2013 01:47:40 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Thunderbird/3.1.16

On 11/11/2013 12:35 AM, John W. Eaton wrote:
On 11/10/2013 10:45 PM, Daniel J Sebald wrote:

The last answer at this link seems to know more than the rest of us:

http://stackoverflow.com/questions/12820765/can-i-send-signals-to-different-threads


Maybe there is something there.

Yes, it mentions pthread_kill. That appears to allow us to direct a
signal to a particular thread.

I'm attaching a patch that seems to at least partially work for me.
At least interrupts seem to work now inside sleep and long running
functions like "inv (large_matrix)", but now I also get random
segfaults when typing Ctrl-C in the command window after a few
interrupts have been processed (it seems random).

There is a lot there. The only thing that seems somewhat suspicious from first glance is the fact that

+  interpreter_thread = pthread_self ();
+

I.e., the fact that a thread might be interrupting itself. On the other hand, the pthread documentation says that is fine, but more than that it looks like the GUI thread is actually initiating the pthread_kill() using the above pointer so the thread really isn't interrupting itself.

I'm not sure what the problem might be for the random seg fault, and yes pthread_kill might not be portable.


I don't expect it will work on Windows. I suppose it just
happens to work for me because Qt is using pthreads on my system.
What if Qt doesn't use pthreads?

Have you looked at the QThread::exit() member function?

http://qt-project.org/doc/qt-4.7/qthread.html#signalSection

Could that be used instead of pthread_kill somehow? The documentation indicates this is not really an exit() in the conventional sense and that the thread remains active, but needs to be restarted with exec(). Of course, this does nothing to clean up Octave core, so one would have to figure out how to call the necessary code inside Octave-core upon restarting it from the GUI.

Dan


reply via email to

[Prev in Thread] Current Thread [Next in Thread]