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>
* ext/syslog/test.rb: Switch from RUnit to Test::Unit.

View file

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