Error when calling gimp_file_load() from concurrent thread
This discussion is connected to the gimp-developer-list.gnome.org mailing list which is provided by the GIMP developers and not related to gimpusers.com.
This is a read-only list on gimpusers.com so this discussion thread is read-only, too.
Error when calling gimp_file_load() from concurrent thread | Alessandro Francesconi | 14 Jul 19:15 |
Error when calling gimp_file_load() from concurrent thread | Michael Natterer | 14 Jul 20:01 |
Error when calling gimp_file_load() from concurrent thread | Alessandro Francesconi | 15 Jul 09:51 |
Error when calling gimp_file_load() from concurrent thread | Alessandro Francesconi | 15 Jul 11:10 |
Error when calling gimp_file_load() from concurrent thread
Hello, I'm the author of BIMP, Batch Image Manipulation Plugin (http://www.alessandrofrancesconi.it/projects/bimp/) and I'm extending this tool with the possibility to stop the whole batch process by clicking on a GTK button.
For that I'm enabling a multi threading functionality. In few words, when clicking on the "Apply" button, the function that does the batch process is called from a newly created thread, with the use of 'g_thread_new ("thread_name", bimp_start_batch, data)'.
I'm facing a strange problem: everything that is called from the concurrent thread (precisely by 'bimp_start_batch' function) works, except when it's time to call 'gimp_file_load' for opening the image files... because the program crashes with this kind of message in the console:
(bimp:6646): LibGimpBase-ERROR **: gimp_wire_read_msg: could not find handler for message: 1952804208
Is it something related to the fact that gimp_file_load() tries to send
a message but, having it been called from a secondary thread, the
message "never reaches its destination"?
Does the group of functions here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpmessage.html and
here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpplugin.html#gimp-plugin-set-pdb-error-handler
can help me?
In other words, what's the correct way to call gimp_* functions from a concurrent thread? Thank you so much for your help.
-Ale
Error when calling gimp_file_load() from concurrent thread
On Sat, 2012-07-14 at 21:15 +0200, Alessandro Francesconi wrote:
Hello, I'm the author of BIMP, Batch Image Manipulation Plugin (http://www.alessandrofrancesconi.it/projects/bimp/) and I'm extending this tool with the possibility to stop the whole batch process by clicking on a GTK button.
For that I'm enabling a multi threading functionality. In few words, when clicking on the "Apply" button, the function that does the batch process is called from a newly created thread, with the use of 'g_thread_new ("thread_name", bimp_start_batch, data)'.
I'm facing a strange problem: everything that is called from the concurrent thread (precisely by 'bimp_start_batch' function) works, except when it's time to call 'gimp_file_load' for opening the image files... because the program crashes with this kind of message in the console:
(bimp:6646): LibGimpBase-ERROR **: gimp_wire_read_msg: could not find handler for message: 1952804208
Is it something related to the fact that gimp_file_load() tries to send a message but, having it been called from a secondary thread, the message "never reaches its destination"? Does the group of functions here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpmessage.html and here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpplugin.html#gimp-plugin-set-pdb-error-handler can help me?In other words, what's the correct way to call gimp_* functions from a concurrent thread? Thank you so much for your help.
You *must not* call GIMP API from anywhere but the main thread, and you *should* not call GTK+ API from anything but the main thread, or your stuff won't work on win32/osx.
You might find GIMP API that works multi-threaded, but definitely not any that talk to the core via the PDB.
--mitch
Error when calling gimp_file_load() from concurrent thread
On 14/07/2012 22:01, Michael Natterer wrote:
On Sat, 2012-07-14 at 21:15 +0200, Alessandro Francesconi wrote:
Hello, I'm the author of BIMP, Batch Image Manipulation Plugin (http://www.alessandrofrancesconi.it/projects/bimp/) and I'm extending this tool with the possibility to stop the whole batch process by clicking on a GTK button.
For that I'm enabling a multi threading functionality. In few words, when clicking on the "Apply" button, the function that does the batch process is called from a newly created thread, with the use of 'g_thread_new ("thread_name", bimp_start_batch, data)'.
I'm facing a strange problem: everything that is called from the concurrent thread (precisely by 'bimp_start_batch' function) works, except when it's time to call 'gimp_file_load' for opening the image files... because the program crashes with this kind of message in the console:
(bimp:6646): LibGimpBase-ERROR **: gimp_wire_read_msg: could not find handler for message: 1952804208
Is it something related to the fact that gimp_file_load() tries to send a message but, having it been called from a secondary thread, the message "never reaches its destination"? Does the group of functions here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpmessage.html and here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpplugin.html#gimp-plugin-set-pdb-error-handler can help me?In other words, what's the correct way to call gimp_* functions from a concurrent thread? Thank you so much for your help.
You *must not* call GIMP API from anywhere but the main thread, and you *should* not call GTK+ API from anything but the main thread, or your stuff won't work on win32/osx.
You might find GIMP API that works multi-threaded, but definitely not any that talk to the core via the PDB.
--mitch
Damn, it's the worst thing I could expect (and by the way it seems really strange because GTK itself has a lot of multithreading APIs here http://developer.gnome.org/glib/2.28/glib-Threads.html)... Any ideas on how to solvethis situation?
-Ale
Error when calling gimp_file_load() from concurrent thread
On 14/07/2012 22:01, Michael Natterer wrote:
On Sat, 2012-07-14 at 21:15 +0200, Alessandro Francesconi wrote:
Hello, I'm the author of BIMP, Batch Image Manipulation Plugin (http://www.alessandrofrancesconi.it/projects/bimp/) and I'm extending this tool with the possibility to stop the whole batch process by clicking on a GTK button.
For that I'm enabling a multi threading functionality. In few words, when clicking on the "Apply" button, the function that does the batch process is called from a newly created thread, with the use of 'g_thread_new ("thread_name", bimp_start_batch, data)'.
I'm facing a strange problem: everything that is called from the concurrent thread (precisely by 'bimp_start_batch' function) works, except when it's time to call 'gimp_file_load' for opening the image files... because the program crashes with this kind of message in the console:
(bimp:6646): LibGimpBase-ERROR **: gimp_wire_read_msg: could not find handler for message: 1952804208
Is it something related to the fact that gimp_file_load() tries to send a message but, having it been called from a secondary thread, the message "never reaches its destination"? Does the group of functions here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpmessage.html and here
http://developer.gimp.org/api/2.0/libgimp/libgimp-gimpplugin.html#gimp-plugin-set-pdb-error-handler can help me?In other words, what's the correct way to call gimp_* functions from a concurrent thread? Thank you so much for your help.
You *must not* call GIMP API from anywhere but the main thread, and you *should* not call GTK+ API from anything but the main thread, or your stuff won't work on win32/osx.
You might find GIMP API that works multi-threaded, but definitely not any that talk to the core via the PDB.
--mitch
Never mind, I solved it by using g_idle_add function. Thanks for the help!