RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm-5_3: rpm/rpmio/ rpmruby.c rpmruby.h xruby.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Mon 20 Sep 2010 - 21:02:19 CEST
Message-Id: <20100920190219.E522FD3355@rpm5.org>
  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
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.