ruby-changes:6619
From: suke <ko1@a...>
Date: Sun, 20 Jul 2008 16:05:40 +0900 (JST)
Subject: [ruby-changes:6619] Ruby:r18135 (trunk): * ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect
suke 2008-07-20 16:05:20 +0900 (Sun, 20 Jul 2008) New Revision: 18135 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18135 Log: * ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect instead of rb_rescue2. [ruby-dev:35595] Modified files: trunk/ChangeLog trunk/ext/win32ole/win32ole.c Index: ChangeLog =================================================================== --- ChangeLog (revision 18134) +++ ChangeLog (revision 18135) @@ -1,3 +1,8 @@ +Sun Jul 20 16:00:37 2008 Masaki Suketa <masaki.suketa@n...> + + * ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect + instead of rb_rescue2. [ruby-dev:35595] + Sun Jul 20 01:23:24 2008 Masaki Suketa <masaki.suketa@n...> * ext/win32ole/win32ole.c (EVENTSINK_Invoke): little refactoring. Index: ext/win32ole/win32ole.c =================================================================== --- ext/win32ole/win32ole.c (revision 18134) +++ ext/win32ole/win32ole.c (revision 18135) @@ -118,7 +118,7 @@ #define WC2VSTR(x) ole_wc2vstr((x), TRUE) -#define WIN32OLE_VERSION "1.2.6" +#define WIN32OLE_VERSION "1.2.7" typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX) (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); @@ -7522,6 +7522,7 @@ VALUE arg[2]; VALUE is_outarg; BOOL is_default_handler = FALSE; + int state; PIEVENTSINKOBJ pEV = (PIEVENTSINKOBJ)pEventSink; pTypeInfo = pEV->pTypeInfo; @@ -7571,13 +7572,14 @@ */ arg[0] = handler; arg[1] = args; - result = rb_rescue2(exec_callback, (VALUE)arg, - rescue_callback, Qnil, - rb_eException, (VALUE)0); + result = rb_protect(exec_callback, (VALUE)arg, &state); + if (state != 0) { + rescue_callback(Qnil); + } if(TYPE(result) == T_HASH) { hash2ptr_dispparams(result, pTypeInfo, dispid, pdispparams); result = hash2result(result); - }else if (is_outarg == Qtrue && outargv != Qnil) { + }else if (is_outarg == Qtrue && TYPE(outargv) == T_ARRAY) { ary2ptr_dispparams(outargv, pdispparams); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/