From e142f2c5db4427be70d10d7e1316e139d08a7c3e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 21 Apr 2010 16:29:56 -0700 Subject: ext: GC safety fix when throwing an exception The return value of rb_inspect() may not be visible on the stack without assigning it to a local variable first. --- ext/clogger_ext/clogger.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ext') diff --git a/ext/clogger_ext/clogger.c b/ext/clogger_ext/clogger.c index 453ff48..8d3bce8 100644 --- a/ext/clogger_ext/clogger.c +++ b/ext/clogger_ext/clogger.c @@ -709,12 +709,14 @@ static VALUE ccall(struct clogger *c, VALUE env) rb_ary_store(rv, 1, c->headers); } } else { + volatile VALUE tmp = rb_inspect(rv); + c->status = INT2FIX(500); c->headers = c->body = rb_ary_new(); cwrite(c); rb_raise(rb_eTypeError, "app response not a 3 element Array: %s", - RSTRING_PTR(rb_inspect(rv))); + RSTRING_PTR(tmp)); } return rv; -- cgit v1.2.3-24-ge0c7