Re: How do you run scripts synchronously?

2001-02-07 Thread Jay Cox

Tim Lambert wrote:
 
 I'm writing a plugin in a mixture of Scheme and C.  The problem I'm
 having is that when I call the Scheme code from C (using
 gimp_run_procedure2 after registering the script with
 script-fu-register), gimp_run_procedure2 returns immediately and the
 script runs in another thread.
 
 I'd like to wait until the script finishes before doing anything
 else.  Gimp doesn't seem to be thread safe, so about half the time the
 plugin will crash or show the wrong data.  Even if gimp was thread
 safe I would still want to wait, but the result would be confusing
 rather than catastrophic.
 

I don't think there is a good way to do this, but there is a hack that should
work.  You can use a parasite as a mutex lock because calls to the parasite
functions are atomic.

C code should look something like this:

  gimp_image_parasite_detach(imageID, "myplugin-mutexlock"); /* in case it is
left over from a previous call */

  gimp_run_procedure2();

  while (!(p = gimp_image_parasite_find(imageID, "myplugin-mutexlock"))
usleep(500);

  gimp_parasite_free(p);

  gimp_image_parasite_detach(imageID, "myplugin-mutexlock"); /* clean up parasite
*/

rest of plugin goes here

In your scheme function you will want to add a parasite to the image with the
name "myplugin-mutexlock" as the last statement in the script.

Of course if your script-fu bombs out your plugin will never return.

Hope This helps,

Jay Cox
[EMAIL PROTECTED]



How do you run scripts synchronously?

2001-02-06 Thread Tim Lambert

I'm writing a plugin in a mixture of Scheme and C.  The problem I'm
having is that when I call the Scheme code from C (using
gimp_run_procedure2 after registering the script with
script-fu-register), gimp_run_procedure2 returns immediately and the
script runs in another thread. 

I'd like to wait until the script finishes before doing anything
else.  Gimp doesn't seem to be thread safe, so about half the time the 
plugin will crash or show the wrong data.  Even if gimp was thread
safe I would still want to wait, but the result would be confusing
rather than catastrophic.

Another minor problem I have is that script-fu-register insists that
my scripts appear on a menu somewhere.  They're not meant for
interctive use so this is not appropriate, but I can't see a way to
prevent them from appearing in a menu.

Tim