Class: Libevent::Signal
- Inherits:
-
Object
- Object
- Libevent::Signal
- Defined in:
- lib/libevent/signal.rb,
ext/libevent_ext/signal.c
Instance Attribute Summary (collapse)
-
- (Object) name
readonly
Returns the value of attribute name.
Instance Method Summary (collapse)
-
- (true, false) destroy
Delete signal from event base.
-
- (Object) initialize
constructor
Create and add signal to specified event base with handler block.
Constructor Details
- (Object) initialize
Note:
method allocates memory for struct event that will be freed when object will be freed by ruby' GC
Create and add signal to specified event base with handler block
|
|
# File 'ext/libevent_ext/signal.c'
static VALUE t_initialize(VALUE self, VALUE base, VALUE name, VALUE handler) {
Libevent_Signal *le_signal;
Libevent_Base *le_base;
VALUE signal_list;
VALUE signal_number;
Data_Get_Struct(self, Libevent_Signal, le_signal);
Data_Get_Struct(base, Libevent_Base, le_base);
// check name
signal_list = rb_funcall( rb_const_get(rb_cObject, rb_intern("Signal")), rb_intern("list"), 0);
signal_number = rb_hash_aref(signal_list, name);
if ( signal_number == Qnil )
rb_raise(rb_eArgError, "unknown signal name given");
rb_iv_set(self, "@name", name);
// check handler
if ( !rb_respond_to(handler, rb_intern("call")))
rb_raise(rb_eArgError, "handler does not response to call method");
rb_iv_set(self, "@handler", handler);
// create signal event
le_signal->ev_event = evsignal_new(le_base->ev_base, FIX2INT(signal_number), t_handler, (void *)handler);
if ( !le_signal->ev_event )
rb_fatal("Could not create a signal event");
if ( event_add(le_signal->ev_event, NULL) < 0 )
rb_fatal("Could not add a signal event");
return self;
}
|
Instance Attribute Details
- (Object) name (readonly)
Returns the value of attribute name
3 4 5 |
# File 'lib/libevent/signal.rb', line 3 def name @name end |
Instance Method Details
- (true, false) destroy
Delete signal from event base
|
|
# File 'ext/libevent_ext/signal.c'
static VALUE t_destroy(VALUE self) {
Libevent_Signal *le_signal;
int status;
Data_Get_Struct(self, Libevent_Signal, le_signal);
status = event_del(le_signal->ev_event);
return( status == -1 ? Qfalse : Qtrue);
}
|