celluloid 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/celluloid.rb +5 -8
 - data/lib/celluloid/actor.rb +9 -6
 - data/lib/celluloid/actor_proxy.rb +7 -11
 - data/lib/celluloid/events.rb +3 -0
 - data/lib/celluloid/mailbox.rb +8 -4
 - data/lib/celluloid/pool.rb +3 -1
 - data/lib/celluloid/version.rb +1 -1
 - metadata +11 -12
 
    
        data/lib/celluloid.rb
    CHANGED
    
    | 
         @@ -25,11 +25,8 @@ module Celluloid 
     | 
|
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                # Obtain the currently running actor (if one exists)
         
     | 
| 
       27 
27 
     | 
    
         
             
                def current_actor
         
     | 
| 
       28 
     | 
    
         
            -
                   
     | 
| 
       29 
     | 
    
         
            -
                  raise NotActorError, "not in actor scope" unless actor
         
     | 
| 
       30 
     | 
    
         
            -
                  actor.proxy
         
     | 
| 
      
 28 
     | 
    
         
            +
                  Actor.current
         
     | 
| 
       31 
29 
     | 
    
         
             
                end
         
     | 
| 
       32 
     | 
    
         
            -
                alias_method :current, :current_actor
         
     | 
| 
       33 
30 
     | 
    
         | 
| 
       34 
31 
     | 
    
         
             
                # Receive an asynchronous message
         
     | 
| 
       35 
32 
     | 
    
         
             
                def receive(timeout = nil, &block)
         
     | 
| 
         @@ -111,7 +108,7 @@ module Celluloid 
     | 
|
| 
       111 
108 
     | 
    
         | 
| 
       112 
109 
     | 
    
         
             
                # Create a new actor and link to the current one
         
     | 
| 
       113 
110 
     | 
    
         
             
                def new_link(*args, &block)
         
     | 
| 
       114 
     | 
    
         
            -
                  current_actor =  
     | 
| 
      
 111 
     | 
    
         
            +
                  current_actor = Actor.current
         
     | 
| 
       115 
112 
     | 
    
         
             
                  raise NotActorError, "can't link outside actor context" unless current_actor
         
     | 
| 
       116 
113 
     | 
    
         | 
| 
       117 
114 
     | 
    
         
             
                  proxy = Actor.new(allocate).proxy
         
     | 
| 
         @@ -207,7 +204,7 @@ module Celluloid 
     | 
|
| 
       207 
204 
     | 
    
         | 
| 
       208 
205 
     | 
    
         
             
              # Obtain the current_actor
         
     | 
| 
       209 
206 
     | 
    
         
             
              def current_actor
         
     | 
| 
       210 
     | 
    
         
            -
                 
     | 
| 
      
 207 
     | 
    
         
            +
                Actor.current
         
     | 
| 
       211 
208 
     | 
    
         
             
              end
         
     | 
| 
       212 
209 
     | 
    
         | 
| 
       213 
210 
     | 
    
         
             
              # Obtain the running tasks for this actor
         
     | 
| 
         @@ -229,13 +226,13 @@ module Celluloid 
     | 
|
| 
       229 
226 
     | 
    
         | 
| 
       230 
227 
     | 
    
         
             
              # Link this actor to another, allowing it to crash or react to errors
         
     | 
| 
       231 
228 
     | 
    
         
             
              def link(actor)
         
     | 
| 
       232 
     | 
    
         
            -
                actor.notify_link  
     | 
| 
      
 229 
     | 
    
         
            +
                actor.notify_link Actor.current
         
     | 
| 
       233 
230 
     | 
    
         
             
                notify_link actor
         
     | 
| 
       234 
231 
     | 
    
         
             
              end
         
     | 
| 
       235 
232 
     | 
    
         | 
| 
       236 
233 
     | 
    
         
             
              # Remove links to another actor
         
     | 
| 
       237 
234 
     | 
    
         
             
              def unlink(actor)
         
     | 
| 
       238 
     | 
    
         
            -
                actor.notify_unlink  
     | 
| 
      
 235 
     | 
    
         
            +
                actor.notify_unlink Actor.current
         
     | 
| 
       239 
236 
     | 
    
         
             
                notify_unlink actor
         
     | 
| 
       240 
237 
     | 
    
         
             
              end
         
     | 
| 
       241 
238 
     | 
    
         | 
    
        data/lib/celluloid/actor.rb
    CHANGED
    
    | 
         @@ -23,6 +23,13 @@ module Celluloid 
     | 
|
| 
       23 
23 
     | 
    
         
             
                attr_reader :proxy, :tasks, :links, :mailbox
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                class << self
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # Obtain the current actor
         
     | 
| 
      
 27 
     | 
    
         
            +
                  def current
         
     | 
| 
      
 28 
     | 
    
         
            +
                    actor = Thread.current[:actor]
         
     | 
| 
      
 29 
     | 
    
         
            +
                    raise NotActorError, "not in actor scope" unless actor
         
     | 
| 
      
 30 
     | 
    
         
            +
                    actor.proxy
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  
         
     | 
| 
       26 
33 
     | 
    
         
             
                  # Invoke a method on the given actor via its mailbox
         
     | 
| 
       27 
34 
     | 
    
         
             
                  def call(mailbox, meth, *args, &block)
         
     | 
| 
       28 
35 
     | 
    
         
             
                    call = SyncCall.new(Thread.mailbox, meth, args, block)
         
     | 
| 
         @@ -96,11 +103,6 @@ module Celluloid 
     | 
|
| 
       96 
103 
     | 
    
         
             
                  end
         
     | 
| 
       97 
104 
     | 
    
         
             
                end
         
     | 
| 
       98 
105 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
                # Is this actor alive?
         
     | 
| 
       100 
     | 
    
         
            -
                def alive?
         
     | 
| 
       101 
     | 
    
         
            -
                  @running
         
     | 
| 
       102 
     | 
    
         
            -
                end
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
106 
     | 
    
         
             
                # Is this actor running in exclusive mode?
         
     | 
| 
       105 
107 
     | 
    
         
             
                def exclusive?
         
     | 
| 
       106 
108 
     | 
    
         
             
                  @exclusive
         
     | 
| 
         @@ -117,7 +119,6 @@ module Celluloid 
     | 
|
| 
       117 
119 
     | 
    
         
             
                # Terminate this actor
         
     | 
| 
       118 
120 
     | 
    
         
             
                def terminate
         
     | 
| 
       119 
121 
     | 
    
         
             
                  @running = false
         
     | 
| 
       120 
     | 
    
         
            -
                  nil
         
     | 
| 
       121 
122 
     | 
    
         
             
                end
         
     | 
| 
       122 
123 
     | 
    
         | 
| 
       123 
124 
     | 
    
         
             
                # Send a signal with the given name to all waiting methods
         
     | 
| 
         @@ -144,6 +145,8 @@ module Celluloid 
     | 
|
| 
       144 
145 
     | 
    
         
             
                      rescue ExitEvent => exit_event
         
     | 
| 
       145 
146 
     | 
    
         
             
                        Task.new(:exit_handler) { handle_exit_event exit_event }.resume
         
     | 
| 
       146 
147 
     | 
    
         
             
                        retry
         
     | 
| 
      
 148 
     | 
    
         
            +
                      rescue TerminationRequest
         
     | 
| 
      
 149 
     | 
    
         
            +
                        break
         
     | 
| 
       147 
150 
     | 
    
         
             
                      end
         
     | 
| 
       148 
151 
     | 
    
         | 
| 
       149 
152 
     | 
    
         
             
                      if message
         
     | 
| 
         @@ -54,18 +54,14 @@ module Celluloid 
     | 
|
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
                # Terminate the associated actor
         
     | 
| 
       56 
56 
     | 
    
         
             
                def terminate
         
     | 
| 
       57 
     | 
    
         
            -
                   
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                    _send_ :terminate
         
     | 
| 
       61 
     | 
    
         
            -
                  rescue DeadActorError
         
     | 
| 
       62 
     | 
    
         
            -
                    # In certain cases this is thrown during termination. This is likely
         
     | 
| 
       63 
     | 
    
         
            -
                    # a bug in Celluloid's internals, but it shouldn't affect the caller.
         
     | 
| 
       64 
     | 
    
         
            -
                    # FIXME: track this down and fix it, or at the very least log it
         
     | 
| 
       65 
     | 
    
         
            -
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                  terminate!
         
     | 
| 
      
 58 
     | 
    
         
            +
                  Thread.pass while alive?
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
       66 
60 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
      
 61 
     | 
    
         
            +
                # Terminate the associated actor asynchronously
         
     | 
| 
      
 62 
     | 
    
         
            +
                def terminate!
         
     | 
| 
      
 63 
     | 
    
         
            +
                  raise DeadActorError, "actor already terminated" unless alive?
         
     | 
| 
      
 64 
     | 
    
         
            +
                  @mailbox.system_event TerminationRequest.new
         
     | 
| 
       69 
65 
     | 
    
         
             
                end
         
     | 
| 
       70 
66 
     | 
    
         | 
| 
       71 
67 
     | 
    
         
             
                # method_missing black magic to call bang predicate methods asynchronously
         
     | 
    
        data/lib/celluloid/events.rb
    CHANGED
    
    
    
        data/lib/celluloid/mailbox.rb
    CHANGED
    
    | 
         @@ -28,7 +28,8 @@ module Celluloid 
     | 
|
| 
       28 
28 
     | 
    
         
             
                    @messages << message
         
     | 
| 
       29 
29 
     | 
    
         
             
                    @condition.signal
         
     | 
| 
       30 
30 
     | 
    
         
             
                    nil
         
     | 
| 
       31 
     | 
    
         
            -
                  ensure 
     | 
| 
      
 31 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @mutex.unlock rescue nil
         
     | 
| 
       32 
33 
     | 
    
         
             
                  end
         
     | 
| 
       33 
34 
     | 
    
         
             
                end
         
     | 
| 
       34 
35 
     | 
    
         | 
| 
         @@ -41,7 +42,8 @@ module Celluloid 
     | 
|
| 
       41 
42 
     | 
    
         
             
                      @condition.signal
         
     | 
| 
       42 
43 
     | 
    
         
             
                    end
         
     | 
| 
       43 
44 
     | 
    
         
             
                    nil
         
     | 
| 
       44 
     | 
    
         
            -
                  ensure 
     | 
| 
      
 45 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @mutex.unlock rescue nil
         
     | 
| 
       45 
47 
     | 
    
         
             
                  end
         
     | 
| 
       46 
48 
     | 
    
         
             
                end
         
     | 
| 
       47 
49 
     | 
    
         | 
| 
         @@ -71,7 +73,8 @@ module Celluloid 
     | 
|
| 
       71 
73 
     | 
    
         
             
                    end until message
         
     | 
| 
       72 
74 
     | 
    
         | 
| 
       73 
75 
     | 
    
         
             
                    message
         
     | 
| 
       74 
     | 
    
         
            -
                  ensure 
     | 
| 
      
 76 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 77 
     | 
    
         
            +
                    @mutex.unlock rescue nil
         
     | 
| 
       75 
78 
     | 
    
         
             
                  end
         
     | 
| 
       76 
79 
     | 
    
         
             
                end
         
     | 
| 
       77 
80 
     | 
    
         | 
| 
         @@ -100,7 +103,8 @@ module Celluloid 
     | 
|
| 
       100 
103 
     | 
    
         
             
                    messages = @messages
         
     | 
| 
       101 
104 
     | 
    
         
             
                    @messages = []
         
     | 
| 
       102 
105 
     | 
    
         
             
                    @dead = true
         
     | 
| 
       103 
     | 
    
         
            -
                  ensure 
     | 
| 
      
 106 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 107 
     | 
    
         
            +
                    @mutex.unlock rescue nil
         
     | 
| 
       104 
108 
     | 
    
         
             
                  end
         
     | 
| 
       105 
109 
     | 
    
         | 
| 
       106 
110 
     | 
    
         
             
                  messages.each { |msg| msg.cleanup if msg.respond_to? :cleanup }
         
     | 
    
        data/lib/celluloid/pool.rb
    CHANGED
    
    | 
         @@ -3,6 +3,7 @@ module Celluloid 
     | 
|
| 
       3 
3 
     | 
    
         
             
              class Pool
         
     | 
| 
       4 
4 
     | 
    
         
             
                include Celluloid
         
     | 
| 
       5 
5 
     | 
    
         
             
                trap_exit :crash_handler
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_reader :max_actors
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         
             
                # Takes a class of actor to pool and a hash of options:
         
     | 
| 
       8 
9 
     | 
    
         
             
                #
         
     | 
| 
         @@ -10,9 +11,10 @@ module Celluloid 
     | 
|
| 
       10 
11 
     | 
    
         
             
                # * max_size: maximum number of actors (default one actor per CPU core)
         
     | 
| 
       11 
12 
     | 
    
         
             
                # * args: an array of arguments to pass to the actor's initialize
         
     | 
| 
       12 
13 
     | 
    
         
             
                def initialize(klass, options = {})
         
     | 
| 
      
 14 
     | 
    
         
            +
                  raise ArgumentError, "A Pool has a minimum size of 2" if options[:max_size] && options[:max_size] < 2
         
     | 
| 
       13 
15 
     | 
    
         
             
                  opts = {
         
     | 
| 
       14 
16 
     | 
    
         
             
                    :initial_size => 1,
         
     | 
| 
       15 
     | 
    
         
            -
                    :max_size     => Celluloid.cores,
         
     | 
| 
      
 17 
     | 
    
         
            +
                    :max_size     => [Celluloid.cores, 2].max,
         
     | 
| 
       16 
18 
     | 
    
         
             
                    :args         => []
         
     | 
| 
       17 
19 
     | 
    
         
             
                  }.merge(options)
         
     | 
| 
       18 
20 
     | 
    
         | 
    
        data/lib/celluloid/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: celluloid
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.10.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,11 +9,11 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-04-02 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rake
         
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &70363787045800 !ruby/object:Gem::Requirement
         
     | 
| 
       17 
17 
     | 
    
         
             
                none: false
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
19 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -21,10 +21,10 @@ dependencies: 
     | 
|
| 
       21 
21 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :development
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *70363787045800
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: rspec
         
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &70363787045200 !ruby/object:Gem::Requirement
         
     | 
| 
       28 
28 
     | 
    
         
             
                none: false
         
     | 
| 
       29 
29 
     | 
    
         
             
                requirements:
         
     | 
| 
       30 
30 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -32,10 +32,10 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       33 
33 
     | 
    
         
             
              type: :development
         
     | 
| 
       34 
34 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       35 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *70363787045200
         
     | 
| 
       36 
36 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
37 
     | 
    
         
             
              name: guard-rspec
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &70363787044600 !ruby/object:Gem::Requirement
         
     | 
| 
       39 
39 
     | 
    
         
             
                none: false
         
     | 
| 
       40 
40 
     | 
    
         
             
                requirements:
         
     | 
| 
       41 
41 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -43,10 +43,10 @@ dependencies: 
     | 
|
| 
       43 
43 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       44 
44 
     | 
    
         
             
              type: :development
         
     | 
| 
       45 
45 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       46 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *70363787044600
         
     | 
| 
       47 
47 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       48 
48 
     | 
    
         
             
              name: benchmark_suite
         
     | 
| 
       49 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 49 
     | 
    
         
            +
              requirement: &70363787044060 !ruby/object:Gem::Requirement
         
     | 
| 
       50 
50 
     | 
    
         
             
                none: false
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
52 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -54,7 +54,7 @@ dependencies: 
     | 
|
| 
       54 
54 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       55 
55 
     | 
    
         
             
              type: :development
         
     | 
| 
       56 
56 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       57 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 57 
     | 
    
         
            +
              version_requirements: *70363787044060
         
     | 
| 
       58 
58 
     | 
    
         
             
            description: Celluloid enables people to build concurrent programs out of concurrent
         
     | 
| 
       59 
59 
     | 
    
         
             
              objects just as easily as they build sequential programs out of sequential objects
         
     | 
| 
       60 
60 
     | 
    
         
             
            email:
         
     | 
| 
         @@ -113,9 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       113 
113 
     | 
    
         
             
                  version: 1.3.6
         
     | 
| 
       114 
114 
     | 
    
         
             
            requirements: []
         
     | 
| 
       115 
115 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       116 
     | 
    
         
            -
            rubygems_version: 1.8. 
     | 
| 
      
 116 
     | 
    
         
            +
            rubygems_version: 1.8.17
         
     | 
| 
       117 
117 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       118 
118 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       119 
119 
     | 
    
         
             
            summary: Actor-based concurrent object framework for Ruby
         
     | 
| 
       120 
120 
     | 
    
         
             
            test_files: []
         
     | 
| 
       121 
     | 
    
         
            -
            has_rdoc: 
         
     |