From: Charlie Savage Date: 2011-09-16T11:32:04+09:00 Subject: [ruby-core:39570] [Ruby 1.9 - Bug #5193] ruby_thread_data_type linker errors fixed with RUBY_EXTERN Issue #5193 has been updated by Charlie Savage. > No, it keeps thread objects. But I'm not sure if allowing > GC is necessary. Seems a thread object will be removed > from the table by check_thread_contexts() if the thread has > terminated. Isn't it enough? Since I don't know the code, I don't the answer. Mark would be best to answer that. > I'm uncertain of "the need". You mean that you won't > need the header to compile ruby-debug? Yes. To compile ruby-debug you must have the Ruby source code installed because it refers to the headers iseq.h and vm_core.h neither of which are installed by Ruby. It would be much better for ruby-debug to not have to use those headers and instead could just use Ruby's public api. Don't know if that is currently possible. If not, seems like a nice addition for 1.9.4 (I know you have mentioned work on an official debug api). ---------------------------------------- Bug #5193: ruby_thread_data_type linker errors fixed with RUBY_EXTERN http://redmine.ruby-lang.org/issues/5193 Author: Charlie Savage Status: Third Party's Issue Priority: Normal Assignee: Nobuyoshi Nakada Category: core Target version: 1.9.3 ruby -v: - ruby-debug-base19x fails to compile with VC++ 2010 with this error: ruby_debug.obj : error LNK2001: unresolved external symbol _ruby_thread_data_type ruby_thread_data_type is declared in vm_core.h as: extern const rb_data_type_t ruby_thread_data_type; ruby-debug calls GetThreadPtr which is defined as: #define GetThreadPtr(obj, ptr) \ TypedData_Get_Struct((obj), rb_thread_t, &ruby_thread_data_type, (ptr)) What makes this interesting is that ruby_thread_data_type is properly included in the msvcr100-ruby191.def file and is exported from msvcr100-ruby191.dll. Somehow the &ruby_thread_data_type causes problems for VC++ (mingw works correctly). Some Ubuntu users seem to be having a similar issue. See: http://rubyforge.org/tracker/index.php?func=detail&aid=29222&group_id=8883&atid=34290 The problem is resolved for VC++ by changing the definition to: RUBY_EXTERN const rb_data_type_t ruby_thread_data_type; Any chance this change could be made? Thanks - Charlie -- http://redmine.ruby-lang.org