Hello,

why can the following example code be successfully stopped by control-c
using ruby 1.9.2-p290 but NOT using ruby 2.0.0-p0 (control-c is ignored)
?

Any idea ?

Cheers


require 'ffi-inliner'
require 'fiber'

module Test

  extend FFI::Library
  extend Inliner

  inline <<-'EOF'
  // *****************************************************
  // * Shared library functions
  // *****************************************************
  unsigned int i = 0;
  void func1() {
    printf("Starting func1\n");
    while(1) {
  my_wait(1);
//  printf("Loop func1: %u\n", i);
  i++;
    }
  }
  void func2() {
    printf("Starting func2\n");
    while(1) {
  my_wait(2);
//  printf("Loop func2: %u\n", i);
    }
  }
  // *****************************************************
  // * Bridge functions
  // *****************************************************
  void (*my_wait_function)(unsigned int);
  void register_my_wait_function(void *p) {
  my_wait_function = p;
  }
  void my_wait(unsigned int i) {
  (*my_wait_function)(i);
  }
  EOF

  callback        :cb_my_wait,                [:uint],       :void
  attach_function :register_my_wait_function, [:cb_my_wait], :void
  attach_function :func1,                     [],            :void
  attach_function :func2,                     [],            :void

  attach_variable :i, :uint


  FUNC = Proc.new do
    |id|

    if id==1
      @fib2.resume
    else
      p i if (i%100000)==0
      Fiber.yield
    end
  end

  register_my_wait_function FUNC

  self.i = 0

  @fib1 = Fiber.new do
    func1
  end

  @fib2 = Fiber.new do
    func2
  end

  @fib1.resume

end

-- 
Posted via http://www.ruby-forum.com/.