1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/syslog/syslog.c: Fix a problem where Syslog#ident was not

marked and could thus be GC'd.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3091 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
knu 2002-11-27 07:15:37 +00:00
parent 2c463325ae
commit 688f0d6c8e
2 changed files with 27 additions and 28 deletions

View file

@ -1,3 +1,8 @@
Wed Nov 27 16:14:12 2002 Akinori MUSHA <knu@iDaemons.org>
* ext/syslog/syslog.c: Fix a problem where Syslog#ident was not
marked and could thus be GC'd.
Wed Nov 27 16:11:53 2002 Akinori MUSHA <knu@iDaemons.org> Wed Nov 27 16:11:53 2002 Akinori MUSHA <knu@iDaemons.org>
* ext/syslog/test.rb: Switch from RUnit to Test::Unit. * ext/syslog/test.rb: Switch from RUnit to Test::Unit.

View file

@ -12,8 +12,8 @@
/* Syslog class */ /* Syslog class */
static VALUE mSyslog, mSyslogConstants; static VALUE mSyslog, mSyslogConstants;
static VALUE syslog_ident = Qnil, syslog_options = INT2FIX(-1), static const char *syslog_ident = NULL;
syslog_facility = INT2FIX(-1), syslog_mask = INT2FIX(-1); static int syslog_options = -1, syslog_facility = -1, syslog_mask = -1;
static int syslog_opened = 0; static int syslog_opened = 0;
/* Package helper routines */ /* Package helper routines */
@ -67,14 +67,13 @@ static VALUE mSyslog_open(int argc, VALUE *argv, VALUE self)
#else #else
Check_SafeStr(ident); Check_SafeStr(ident);
#endif #endif
syslog_ident = ident; syslog_ident = (const char *)strdup(RSTRING(ident)->ptr);
syslog_options = opt; syslog_options = NUM2INT(opt);
syslog_facility = fac; syslog_facility = NUM2INT(fac);
openlog(RSTRING(ident)->ptr, NUM2INT(opt), NUM2INT(fac)); openlog(syslog_ident, syslog_options, syslog_facility);
syslog_opened = 1; syslog_opened = 1;
setlogmask(mask = setlogmask(0)); setlogmask(syslog_mask = setlogmask(0));
syslog_mask = INT2NUM(mask);
/* be like File.new.open {...} */ /* be like File.new.open {...} */
if (rb_block_given_p()) { if (rb_block_given_p()) {
@ -98,22 +97,22 @@ static VALUE mSyslog_isopen(VALUE self)
static VALUE mSyslog_ident(VALUE self) static VALUE mSyslog_ident(VALUE self)
{ {
return syslog_ident; return rb_str_new2(syslog_ident);
} }
static VALUE mSyslog_options(VALUE self) static VALUE mSyslog_options(VALUE self)
{ {
return syslog_options; return INT2NUM(syslog_options);
} }
static VALUE mSyslog_facility(VALUE self) static VALUE mSyslog_facility(VALUE self)
{ {
return syslog_facility; return INT2NUM(syslog_facility);
} }
static VALUE mSyslog_get_mask(VALUE self) static VALUE mSyslog_get_mask(VALUE self)
{ {
return syslog_mask; return INT2NUM(syslog_mask);
} }
static VALUE mSyslog_set_mask(VALUE self, VALUE mask) static VALUE mSyslog_set_mask(VALUE self, VALUE mask)
@ -122,8 +121,7 @@ static VALUE mSyslog_set_mask(VALUE self, VALUE mask)
rb_raise(rb_eRuntimeError, "must open syslog before setting log mask"); rb_raise(rb_eRuntimeError, "must open syslog before setting log mask");
} }
setlogmask(NUM2INT(mask)); setlogmask(syslog_mask = NUM2INT(mask));
syslog_mask = mask;
return mask; return mask;
} }
@ -150,22 +148,18 @@ static VALUE mSyslog_log(int argc, VALUE *argv, VALUE self)
static VALUE mSyslog_inspect(VALUE self) static VALUE mSyslog_inspect(VALUE self)
{ {
#define N 7 char buf[1024];
int argc = N;
VALUE argv[N];
const char fmt[] =
"<#%s: opened=%s, ident=\"%s\", options=%d, facility=%d, mask=%d>";
argv[0] = rb_str_new(fmt, sizeof(fmt) - 1); snprintf(buf, sizeof(buf),
argv[1] = mSyslog; "<#%s: ident=\"%s\", options=%d, facility=%d, mask=%d%s>",
argv[2] = syslog_opened ? Qtrue : Qfalse; rb_class2name(self),
argv[3] = syslog_ident; syslog_ident,
argv[4] = syslog_options; syslog_options,
argv[5] = syslog_facility; syslog_facility,
argv[6] = syslog_mask; syslog_mask,
syslog_opened ? ", opened" : "");
return rb_f_sprintf(argc, argv); return rb_str_new2(buf);
#undef N
} }
static VALUE mSyslog_instance(VALUE self) static VALUE mSyslog_instance(VALUE self)