Update of /cvsroot/openvrml/openvrml/mozilla-plugin/src
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv16287/mozilla-plugin/src
Modified Files:
Tag: OpenVRML-0_16-BRANCH
openvrml.cpp
Log Message:
ScopeGuard as initially described by Alexandrescu and Marginean copies the callback function parameters to the guard implementation. This means that the callback is called with the values given when make_guard gets called--not whatever the values might be when execution in the scope completes.
This changes OpenVRML's implementation of ScopeGuard to keep const references to the parameters in the guard implementation. Also, use of boost::multi_index::detail::scope_guard (where use of OpenVRML's ScopeGuard implementation is inconvenient) now explicitly gives a reference template parameter to the instantiation of make_guard to circumvent this problem.
Index: openvrml.cpp
===================================================================
RCS file: /cvsroot/openvrml/openvrml/mozilla-plugin/src/openvrml.cpp,v
retrieving revision 1.37.2.11
retrieving revision 1.37.2.12
diff -C2 -d -r1.37.2.11 -r1.37.2.12
*** openvrml.cpp 6 Dec 2006 01:58:38 -0000 1.37.2.11
--- openvrml.cpp 2 Jan 2007 00:07:28 -0000 1.37.2.12
***************
*** 1123,1127 ****
gchar ** openvrml_gtkplug_cmd_argv = 0;
scope_guard openvrml_gtkplug_cmd_argv_guard =
! make_guard(g_strfreev, openvrml_gtkplug_cmd_argv);
boost::ignore_unused_variable_warning(openvrml_gtkplug_cmd_argv_guard);
const gchar * const openvrml_gtkplug_cmd =
--- 1123,1128 ----
gchar ** openvrml_gtkplug_cmd_argv = 0;
scope_guard openvrml_gtkplug_cmd_argv_guard =
! make_guard<void (*)(gchar **), gchar ** &>(
! g_strfreev, openvrml_gtkplug_cmd_argv);
boost::ignore_unused_variable_warning(openvrml_gtkplug_cmd_argv_guard);
const gchar * const openvrml_gtkplug_cmd =
***************
*** 1137,1141 ****
} else {
GError * error = 0;
! scope_guard error_guard = make_guard(g_error_free, error);
gboolean succeeded =
g_shell_parse_argv(openvrml_gtkplug_cmd,
--- 1138,1144 ----
} else {
GError * error = 0;
! scope_guard error_guard =
! make_guard<void (*)(GError *), GError * &>(g_error_free,
! error);
gboolean succeeded =
g_shell_parse_argv(openvrml_gtkplug_cmd,
***************
*** 1188,1192 ****
gint * const standard_error = 0;
GError * error = 0;
! scope_guard error_guard = make_guard(g_error_free, error);
gboolean succeeded = g_spawn_async_with_pipes(working_dir,
argv,
--- 1191,1196 ----
gint * const standard_error = 0;
GError * error = 0;
! scope_guard error_guard =
! make_guard<void (*)(GError *), GError * &>(g_error_free, error);
gboolean succeeded = g_spawn_async_with_pipes(working_dir,
argv,
|