Mercurial > hg > octave-nkf
diff liboctave/cmd-edit.cc @ 7936:78400fde223e
Support for backend-to-octave event management
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 17 Jul 2008 07:58:50 -0400 |
parents | 8e14a01ffe9f |
children | 0ef13e15319b |
line wrap: on
line diff
--- a/liboctave/cmd-edit.cc +++ b/liboctave/cmd-edit.cc @@ -45,6 +45,7 @@ #include "lo-error.h" #include "lo-utils.h" #include "oct-env.h" +#include "oct-mutex.h" #include "oct-time.h" command_editor *command_editor::instance = 0; @@ -53,6 +54,8 @@ std::set<command_editor::event_hook_fcn> command_editor::event_hook_set; +static octave_mutex event_hook_lock; + #if defined (USE_READLINE) #include <cstdio> @@ -852,8 +855,14 @@ int command_editor::event_handler (void) { - for (event_hook_set_iterator p = event_hook_set.begin (); - p != event_hook_set.end (); p++) + event_hook_lock.lock (); + + std::set<event_hook_fcn> hook_set (event_hook_set); + + event_hook_lock.unlock (); + + for (event_hook_set_iterator p = hook_set.begin (); + p != hook_set.end (); p++) { event_hook_fcn f = *p; @@ -1160,6 +1169,8 @@ void command_editor::add_event_hook (event_hook_fcn f) { + octave_autolock guard (event_hook_lock); + if (instance_ok ()) { event_hook_set.insert (f); @@ -1171,6 +1182,8 @@ void command_editor::remove_event_hook (event_hook_fcn f) { + octave_autolock guard (event_hook_lock); + if (instance_ok ()) { event_hook_set_iterator p = event_hook_set.find (f);