On Thu, Sep 29, 2005 at 12:06:13AM +0900, Mark Volkmann wrote: > See my question below. > > > # See NotifyTemplateEntry for examples of how to listen for > > notifications. > > # > > # +event+ can be: > > # 'write':: A tuple was added > > # 'take':: A tuple was taken or moved > > # 'delete':: A tuple was lost after being overwritten or expiring > > Under what circumstances is a tuple "overwritten"? > In looking at the code in rinda/tuplespace.rb, it seems that a delete event will only be sent when a tuple expires and the tuplespace garbage collector is run: def keep_clean synchronize do @read_waiter.delete_unless_alive.each do |e| e.signal end @take_waiter.delete_unless_alive.each do |e| e.signal end @notify_waiter.delete_unless_alive.each do |e| e.notify(['close']) end @bag.delete_unless_alive.each do |e| notify_event('delete', e.value) end end end And when a write event happens where the tuple being written is expired: def write(tuple, sec=nil) entry = TupleEntry.new(tuple, sec) synchronize do if entry.expired? @read_waiter.find_all_template(entry).each do |template| template.read(tuple) end notify_event('write', entry.value) notify_event('delete', entry.value) else @bag.push(entry) @read_waiter.find_all_template(entry).each do |template| template.read(tuple) end @take_waiter.find_all_template(entry).each do |template| template.signal end notify_event('write', entry.value) end end entry end You can expire a tuple on write using the write method a giving a value of 0 for sec. I am not sure why this would be useful. Rick -- Rick Nooner rick / nooner.net http://www.nooner.net