From fe61cad7490da8a879597f851f4a89856d44838e Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Tue, 26 Jul 2022 17:40:00 +0200 Subject: Implement SizedQueue#push(timeout: sec) [Feature #18944] If both `non_block=true` and `timeout:` are supplied, ArgumentError is raised. --- thread_sync.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'thread_sync.rb') diff --git a/thread_sync.rb b/thread_sync.rb index d567ca51af..7e4c341ad0 100644 --- a/thread_sync.rb +++ b/thread_sync.rb @@ -41,5 +41,28 @@ class Thread end alias_method :deq, :pop alias_method :shift, :pop + + # call-seq: + # push(object, non_block=false, timeout: nil) + # enq(object, non_block=false, timeout: nil) + # <<(object) + # + # Pushes +object+ to the queue. + # + # If there is no space left in the queue, waits until space becomes + # available, unless +non_block+ is true. If +non_block+ is true, the + # thread isn't suspended, and +ThreadError+ is raised. + # + # If +timeout+ seconds have passed and no space is available +nil+ is + # returned. + # Otherwise it returns +self+. + def push(object, non_block = false, timeout: nil) + if non_block && timeout + raise ArgumentError, "can't set a timeout if non_block is enabled" + end + Primitive.rb_szqueue_push(object, non_block, timeout) + end + alias_method :enq, :push + alias_method :<<, :push end end -- cgit v1.2.3