summaryrefslogtreecommitdiff
path: root/x11/ruby-tcltklib/patches/patch-aa
diff options
context:
space:
mode:
authortaca <taca@pkgsrc.org>2005-01-23 17:36:59 +0000
committertaca <taca@pkgsrc.org>2005-01-23 17:36:59 +0000
commit34b2e8ca7311c61685e98eaf65fe19e97034268d (patch)
tree9a1978da029083fdfd0e5af584d1a2d8e8dc5b48 /x11/ruby-tcltklib/patches/patch-aa
parent427bde23af962172b7e1b1a93026c3fe8df7d6f9 (diff)
downloadpkgsrc-34b2e8ca7311c61685e98eaf65fe19e97034268d.tar.gz
Update to Ruby 1.8.2 base and this change:
* ext/tcltklib/tcltklib.c: fix SEGV bug when deleting Tk interp
Diffstat (limited to 'x11/ruby-tcltklib/patches/patch-aa')
-rw-r--r--x11/ruby-tcltklib/patches/patch-aa105
1 files changed, 105 insertions, 0 deletions
diff --git a/x11/ruby-tcltklib/patches/patch-aa b/x11/ruby-tcltklib/patches/patch-aa
new file mode 100644
index 00000000000..a74212dd263
--- /dev/null
+++ b/x11/ruby-tcltklib/patches/patch-aa
@@ -0,0 +1,105 @@
+$NetBSD: patch-aa,v 1.1 2005/01/23 17:36:59 taca Exp $
+
+--- ext/tcltklib/tcltklib.c.orig 2004-12-23 13:16:42.000000000 +0900
++++ ext/tcltklib/tcltklib.c
+@@ -4,7 +4,7 @@
+ * Oct. 24, 1997 Y. Matsumoto
+ */
+
+-#define TCLTKLIB_RELEASE_DATE "2004-12-23"
++#define TCLTKLIB_RELEASE_DATE "2004-12-27"
+
+ #include "ruby.h"
+ #include "rubysig.h"
+@@ -70,9 +70,13 @@ fprintf(stderr, ARG1, ARG2); fprintf(std
+ /* release date */
+ const char tcltklib_release_date[] = TCLTKLIB_RELEASE_DATE;
+
+-/*finalize_proc_name */
++/* finalize_proc_name */
+ static char *finalize_hook_name = "INTERP_FINALIZE_HOOK";
+
++/* to cancel remained after-scripts when deleting IP */
++#define REMAINED_AFTER_IDS_VAR "__ruby_tcltklib_remained_after_script_list__"
++#define CANCEL_REMAINED_AFTER_IDS "foreach id $__ruby_tcltklib_remained_after_script_list__ {after cancel $id}"
++
+ /* for callback break & continue */
+ static VALUE eTkCallbackReturn;
+ static VALUE eTkCallbackBreak;
+@@ -3312,12 +3316,16 @@ delete_slaves(ip)
+
+ Tcl_Preserve(slave);
+
+-#if TCL_MAJOR_VERSION < 8 || ( TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION < 4)
+-#else
+ if (!Tcl_InterpDeleted(slave)) {
+- Tcl_Eval(slave, "foreach i [after info] { after cancel $i }");
++ if (Tcl_Eval(slave, "after info") == TCL_OK
++ && Tcl_SetVar(slave,
++ REMAINED_AFTER_IDS_VAR,
++ Tcl_GetStringResult(slave),
++ TCL_GLOBAL_ONLY) != (char *)NULL) {
++ DUMP1("cancel after scripts");
++ Tcl_Eval(slave, CANCEL_REMAINED_AFTER_IDS);
++ }
+ }
+-#endif
+
+ /* delete slaves of slave */
+ delete_slaves(slave);
+@@ -3360,18 +3368,20 @@ ip_free(ptr)
+
+ Tcl_ResetResult(ptr->ip);
+
++ if (Tcl_Eval(ptr->ip, "after info") == TCL_OK
++ && Tcl_SetVar(ptr->ip,
++ REMAINED_AFTER_IDS_VAR,
++ Tcl_GetStringResult(ptr->ip),
++ TCL_GLOBAL_ONLY) != (char *)NULL) {
++ DUMP1("cancel after scripts");
++ Tcl_Eval(ptr->ip, CANCEL_REMAINED_AFTER_IDS);
++ }
++
+ if (Tcl_GetCommandInfo(ptr->ip, finalize_hook_name, &info)) {
+ DUMP2("call finalize hook proc '%s'", finalize_hook_name);
+ Tcl_Eval(ptr->ip, finalize_hook_name);
+ }
+
+-#if TCL_MAJOR_VERSION < 8 || ( TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION < 4)
+-#else
+- if (!Tcl_InterpDeleted(ptr->ip)) {
+- Tcl_Eval(ptr->ip, "foreach i [after info] {after cancel $i}");
+- }
+-#endif
+-
+ del_root(ptr->ip);
+
+ DUMP1("delete interp");
+@@ -3838,12 +3848,14 @@ ip_delete(self)
+ /* Tcl_Preserve(ptr->ip); */
+ rbtk_preserve_ip(ptr);
+
+-#if TCL_MAJOR_VERSION < 8 || ( TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION < 4)
+-#else
+- if (!Tcl_InterpDeleted(ptr->ip)) {
+- Tcl_Eval(ptr->ip, "foreach i [after info] { after cancel $i }");
++ if (Tcl_Eval(ptr->ip, "after info") == TCL_OK
++ && Tcl_SetVar(ptr->ip,
++ REMAINED_AFTER_IDS_VAR,
++ Tcl_GetStringResult(ptr->ip),
++ TCL_GLOBAL_ONLY) != (char *)NULL) {
++ DUMP1("cancel after scripts");
++ Tcl_Eval(ptr->ip, CANCEL_REMAINED_AFTER_IDS);
+ }
+-#endif
+
+ del_root(ptr->ip);
+
+@@ -4188,6 +4200,7 @@ ip_eval(self, str)
+ rb_thread_stop();
+ }
+ DUMP2("back from handler (current thread:%lx)", current);
++ DUMP1("ip_eval back:111");
+
+ /* get result & free allocated memory */
+ ret = RARRAY(result)->ptr[0];