diff options
author | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-25 00:11:41 +0000 |
---|---|---|
committer | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-25 00:11:41 +0000 |
commit | 1578edbafc8d641a1829cb1949318aa754fc5485 (patch) | |
tree | b355dd2dea9b73d02eb4de4b0d7f7c11a40bc9df /ext | |
parent | 159e6439c0d94d0f2c0dffdfe0d76aad631eb876 (diff) | |
download | ruby-1578edbafc8d641a1829cb1949318aa754fc5485.tar.gz |
* ext/dl/handle.c (rb_dlhandle_close_enabled_p) testing that handles can
be enabled and disabled for closure on GC.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25462 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/dl/handle.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/ext/dl/handle.c b/ext/dl/handle.c index 6c2ef37b3d..28be36c099 100644 --- a/ext/dl/handle.c +++ b/ext/dl/handle.c @@ -181,6 +181,11 @@ rb_dlhandle_initialize(int argc, VALUE argv[], VALUE self) return Qnil; } +/* + * call-seq: enable_close + * + * Enable a call to dlclose() when this DL::Handle is garbage collected. + */ VALUE rb_dlhandle_enable_close(VALUE self) { @@ -191,6 +196,11 @@ rb_dlhandle_enable_close(VALUE self) return Qnil; } +/* + * call-seq: disable_close + * + * Disable a call to dlclose() when this DL::Handle is garbage collected. + */ VALUE rb_dlhandle_disable_close(VALUE self) { @@ -202,6 +212,23 @@ rb_dlhandle_disable_close(VALUE self) } /* + * call-seq: close_enabled? + * + * Returns +true+ if dlclose() will be called when this DL::Handle is + * garbage collected. + */ +static VALUE +rb_dlhandle_close_enabled_p(VALUE self) +{ + struct dl_handle *dlhandle; + + TypedData_Get_Struct(self, struct dl_handle, &dlhandle_data_type, dlhandle); + + if(dlhandle->enable_close) return Qtrue; + return Qfalse; +} + +/* * call-seq: to_i * * Returns the memory address for this handle. @@ -338,6 +365,7 @@ Init_dlhandle(void) rb_define_method(rb_cDLHandle, "[]", rb_dlhandle_sym, 1); rb_define_method(rb_cDLHandle, "disable_close", rb_dlhandle_disable_close, 0); rb_define_method(rb_cDLHandle, "enable_close", rb_dlhandle_enable_close, 0); + rb_define_method(rb_cDLHandle, "close_enabled?", rb_dlhandle_close_enabled_p, 0); } /* mode: c; tab-with=8; sw=8; ts=8; noexpandtab: */ |