RPM Package Manager, CVS Repository
/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 20-Sep-2010 21:02:19
Branch: rpm-5_3 Handle: 2010092019021900
Modified files: (Branch: rpm-5_3)
rpm/rpmio rpmruby.c rpmruby.h xruby.c
Log:
- ruby: refactor setup/teardown from xruby -> rpmruby.
Summary:
Revision Changes Path
2.12.2.7 +61 -13 rpm/rpmio/rpmruby.c
2.7.2.4 +1 -0 rpm/rpmio/rpmruby.h
1.1.2.7 +8 -28 rpm/rpmio/xruby.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmruby.c
============================================================================
$ cvs diff -u -r2.12.2.6 -r2.12.2.7 rpmruby.c
--- rpm/rpmio/rpmruby.c 20 Sep 2010 17:50:50 -0000 2.12.2.6
+++ rpm/rpmio/rpmruby.c 20 Sep 2010 19:02:19 -0000 2.12.2.7
@@ -77,11 +77,21 @@
{
rpmruby ruby = _ruby;
+ /* XXX FIXME: 0x40000000 => xruby.c wrapper without interpreter. */
+ if (ruby->flags & 0x40000000) {
+ ruby->zlog = rpmzLogDump(ruby->zlog, NULL);
+ ruby->main_coroutine_lock = yarnFreeLock(ruby->main_coroutine_lock);
+ ruby->ruby_coroutine_lock = yarnFreeLock(ruby->ruby_coroutine_lock);
+ } else {
#if defined(WITH_RUBYEMBED)
- ruby_finalize();
- ruby_cleanup(0);
+ ruby_finalize();
+ ruby_cleanup(0);
#endif
+ }
ruby->I = NULL;
+ ruby->flags = 0;
+ ruby->av = argvFree(ruby->av);
+ ruby->ac = 0;
}
/*@unchecked@*/ /*@only@*/ /*@null@*/
@@ -113,6 +123,7 @@
/*@globals _rpmrubyI @*/
/*@modifies _rpmrubyI @*/
{
+ /* XXX FIXME: pass 0x40000000 for wrapper without interpreter? */
if (_rpmrubyI == NULL)
_rpmrubyI = rpmrubyNew(NULL, 0);
RUBYDBG((stderr, "<-- %s() I %p\n", __FUNCTION__, _rpmrubyI));
@@ -124,6 +135,7 @@
static char * _av[] = { "rpmruby", NULL };
rpmruby ruby = (flags & 0x80000000)
? rpmrubyI() : rpmrubyGetPool(_rpmrubyPool);
+int xx;
RUBYDBG((stderr, "--> %s(%p,0x%x) ruby %p\n", __FUNCTION__, av, flags, ruby));
@@ -133,20 +145,56 @@
if (av == NULL) av = _av;
+ ruby->flags = flags;
+ xx = argvAppend(&ruby->av, (ARGV_t)av);
+ ruby->ac = argvCount(ruby->av);
+
+ /* XXX FIXME: 0x40000000 => xruby.c wrapper without interpreter. */
+ if (ruby->flags & 0x40000000) {
+ static size_t _rpmrubyStackSize = 4 * 1024 * 1024;
+
+ ruby->nstack = _rpmrubyStackSize;
+ ruby->stack = malloc(ruby->nstack);
+assert(ruby->stack != NULL);
+
+ if (_rpmruby_debug)
+ ruby->zlog = rpmzLogNew(&ruby->start); /* initialize logging */
+
+ /* initialize the relay mechanism */
+ ruby->ruby_coroutine_lock = yarnNewLock(0);
+ ruby->main_coroutine_lock = yarnNewLock(0);
+
+ /* XXX save as global interpreter. */
+ _rpmrubyI = ruby;
+
+ } else {
+
#if defined(WITH_RUBYEMBED)
- RUBY_INIT_STACK;
- ruby_init();
- ruby_init_loadpath();
-
- ruby_script((char *)av[0]);
- if (av[1])
- ruby_set_argv(argvCount((ARGV_t)av)-1, av+1);
-
- rb_gv_set("$result", rb_str_new2(""));
-#ifdef NOTYET
- (void) rpmrubyRun(ruby, rpmrubyInitStringIO, NULL);
+ VALUE variable_in_this_stack_frame; /* RUBY_INIT_STSCK */
+
+#ifdef NOTYET /* XXX ruby-1.9.2p0 ruby_bind_stack patch needed */
+ {
+ uint8_t * b = ruby->stack;
+ uint8_t * e = b + ruby->nstack;
+ ruby_sysinit(&ruby->ac, (char ***) &ruby->av);
+ }
+#endif /* NOTYET */
+
+ ruby_init_stack(&variable_in_this_stack_frame); /* RUBY_INIT_STACK */
+
+ ruby_init();
+ ruby_init_loadpath();
+
+ ruby_script((char *)av[0]);
+ if (av[1])
+ ruby_set_argv(argvCount((ARGV_t)av)-1, av+1);
+
+ rb_gv_set("$result", rb_str_new2(""));
+#ifdef NOTYET /* XXX avoid ruby-1.9.2p0 segfaults */
+ (void) rpmrubyRun(ruby, rpmrubyInitStringIO, NULL);
#endif
#endif /* WITH_RUBYEMBED */
+ }
exit:
return rpmrubyLink(ruby);
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmruby.h
============================================================================
$ cvs diff -u -r2.7.2.3 -r2.7.2.4 rpmruby.h
--- rpm/rpmio/rpmruby.h 20 Sep 2010 17:50:50 -0000 2.7.2.3
+++ rpm/rpmio/rpmruby.h 20 Sep 2010 19:02:19 -0000 2.7.2.4
@@ -28,6 +28,7 @@
size_t nstack;
void * stack;
+ uint32_t flags;
ARGV_t av;
int ac;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/xruby.c
============================================================================
$ cvs diff -u -r1.1.2.6 -r1.1.2.7 xruby.c
--- rpm/rpmio/xruby.c 20 Sep 2010 17:49:29 -0000 1.1.2.6
+++ rpm/rpmio/xruby.c 20 Sep 2010 19:02:19 -0000 1.1.2.7
@@ -14,12 +14,9 @@
#include "debug.h"
-static struct rpmruby_s __ruby;
-static rpmruby Xruby = &__ruby;
-
static VALUE relay_from_ruby_to_main(VALUE self)
{
- return _rpmruby_ruby_to_main(Xruby, self);
+ return _rpmruby_ruby_to_main(_rpmrubyI, self);
}
rpmRC rpmrubyRunFile(rpmruby ruby, const char * fn, const char **resultp)
@@ -140,26 +137,15 @@
int main(int argc, char *argv[])
{
-rpmruby ruby = Xruby;
-static char * _av[] = { "rpmruby", "../ruby/hello.rb", NULL };
-ARGV_t av = (ARGV_t)_av;
+ rpmruby ruby;
+ static char * _av[] = { "rpmruby", "../ruby/hello.rb", NULL };
+ ARGV_t av = (ARGV_t)_av;
int ec = 1;
-int xx;
_rpmruby_debug = 1;
-ruby->nstack = 4 * 1024 * 1024;
-ruby->stack = malloc(ruby->nstack);
-assert(ruby->stack != NULL);
-
-xx = argvAppend(&ruby->av, av);
-ruby->ac = argvCount(ruby->av);
-
- if (_rpmruby_debug)
- ruby->zlog = rpmzLogNew(&ruby->start); /* initialize logging */
-
- /* initialize the relay mechanism */
- ruby->ruby_coroutine_lock = yarnNewLock(0);
- ruby->main_coroutine_lock = yarnNewLock(0);
+
+ /* XXX FIXME: 0x40000000 => xruby.c wrapper without interpreter. */
+ ruby = rpmrubyNew((char **)av, 0x40000000);
ec = runOnce(ruby);
if (ec) goto exit;
@@ -172,13 +158,7 @@
exit:
fprintf(stderr, "Main: Goodbye!\n");
-ruby->zlog = rpmzLogDump(ruby->zlog, NULL);
-
- ruby->main_coroutine_lock = yarnFreeLock(ruby->main_coroutine_lock);
- ruby->ruby_coroutine_lock = yarnFreeLock(ruby->ruby_coroutine_lock);
-
-ruby->av = argvFree(ruby->av);
-ruby->ac = 0;
+ ruby = rpmrubyFree(ruby);
return ec;
}
@@ .
Received on Mon Sep 20 21:02:20 2010