[ruby-talk:02349] Re: rb_catch

From: ts <decoux@...>
Date: 2000-04-03 12:21:42 UTC
List: ruby-talk #2349
>>>>> "t" == ts  <decoux@moulon.inra.fr> writes:

t> pigeon% diff -u eval.c~ eval.c
t> --- eval.c~     Tue Dec  7 17:47:15 1999
t> +++ eval.c      Mon Apr  3 12:43:58 2000
t> @@ -7548,7 +7548,7 @@
t>  catch_i(tag)
t>      ID tag;
t>  {
t> -    return rb_f_catch(0, FIX2INT(tag));
t> +    return rb_f_catch(0, INT2FIX(tag));
t>  }

 Same problem with rb_throw()

pigeon% make ruby
gcc -g -O2 -rdynamic  main.o  libruby.a -ldl -lcrypt -lm   -o ruby
pigeon% diff -u eval.c~ eval.c
--- eval.c~     Mon Apr  3 12:43:58 2000
+++ eval.c      Mon Apr  3 14:14:40 2000
@@ -7601,7 +7601,7 @@
     VALUE argv[2];
     ID t = rb_intern(tag);
 
-    argv[0] = FIX2INT(t);
+    argv[0] = INT2FIX(t);
     argv[1] = val;
     rb_f_throw(2, argv);
 }
pigeon% 

 It seems to work now, I use rb_catch() and rb_throw() for the transactions

pigeon% cat b.rb
#!/usr/bin/ruby -w
require "bdb"
env = BDB::Env.new("/tmp", ["DB_DATA_DIR /tmp"],
                  BDB::CREATE | BDB::INIT_MPOOL | BDB::INIT_TXN,
                   {"aa" => "bb", "cc" => "aa"})
db = env.open_db(BDB::BTREE, "aa", nil, BDB::CREATE, 0644)
db["a"] = 12
env.begin(db) do |txn, b|
    b["a"] = 24
    txn.begin do |txn1|
        c = txn1.assoc(db)
        c["a"] = 36
        print "txn1 -- #{db['a']}\n"
        txn1.abort
        print "AFTER THROW\n"
    end
    txn.commit
    print "AFTER THROW\n"
end
print "#{db['a']}\n"
db.close
env.remove
pigeon% b.rb
txn1 -- 36
24
pigeon% 



Guy Decoux

In This Thread

Prev Next