| 著作一覧 |
1.8.7-p299にしたらvrswinのmakeが失敗した。
1.9対応の定義が有効になって1.8では未定義の定数(RUBY_UBF_IO 多分、unblock functionの頭語で、グローバルロックを解除可能な待ち状態に入る場合に指定する)を参照したからだ。
とりあえずその定数を&& !defindしてしのいだ。
が、HAVE_NATIVETHREADでは1.8と1.9が区別できないので、RUBY_UBF_IOを見たほうが意図的にも良さそうに思う。
diff -u -p swin.c~ swin.c
*** swin.c~ Sat Feb 07 23:52:50 2009
--- swin.c Sat Jun 26 22:35:02 2010
*************** swin_call_threadblocking(DWORD chk_th, i
*** 1000,1006 ****
}
va_end(args);
! #ifdef HAVE_NATIVETHREAD
if(chk_th!=GetCurrentThreadId()){ // another thread from current
r = (DWORD)rb_thread_blocking_region((VALUE(*)())Swin_WinAPI_Call,
&calldata,RUBY_UBF_IO,0);
--- 1000,1006 ----
}
va_end(args);
! #if defined(RUBY_UBF_IO)
if(chk_th!=GetCurrentThreadId()){ // another thread from current
r = (DWORD)rb_thread_blocking_region((VALUE(*)())Swin_WinAPI_Call,
&calldata,RUBY_UBF_IO,0);
追記:今まで気づかなかったのはASRに含めていたSwinが1.9対応前のバージョンだったからでした。
追記2:Ruby-1.8のHAVE_NATIVETHREADの役割は、GCやシグナル、tkutilなどで、クロススレッド呼び出しの判定をする必要性からのようで、Ruby-1.9のように積極的なジャイアントロック外しのためではありません。
ジェズイットを見習え |