diff options
author | Stephen D. Huston <shuston@apache.org> | 2011-10-21 14:42:12 +0000 |
---|---|---|
committer | Stephen D. Huston <shuston@apache.org> | 2011-10-21 14:42:12 +0000 |
commit | f83677056891e436bf5ba99e79240df2a44528cd (patch) | |
tree | 625bfd644b948e89105630759cf6decb0435354d /ruby/lib/qpid/queue.rb | |
parent | ebfd9ff053b04ab379acfc0fefedee5a31b6d8a5 (diff) | |
download | qpid-python-QPID-2519.tar.gz |
Merged out from trunkQPID-2519
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/QPID-2519@1187375 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'ruby/lib/qpid/queue.rb')
-rw-r--r-- | ruby/lib/qpid/queue.rb | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/ruby/lib/qpid/queue.rb b/ruby/lib/qpid/queue.rb deleted file mode 100644 index 4150173b53..0000000000 --- a/ruby/lib/qpid/queue.rb +++ /dev/null @@ -1,101 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Augment the standard python multithreaded Queue implementation to add a -# close() method so that threads blocking on the content of a queue can be -# notified if the queue is no longer in use. - -require 'thread' - -# Python nominally uses a bounded queue, but the code never establishes -# a maximum size; we therefore use Ruby's unbounded queue -class Qpid::Queue < ::Queue - - DONE = Object.new - STOP = Object.new - - def initialize - super - @error = nil - @listener = nil - @exc_listener = nil - @exc_listener_lock = Monitor.new - @thread = nil - end - - def close(error = nil) - @error = error - put(DONE) - unless @thread.nil? - @thread.join() - @thread = nil - end - end - - def get(block = true, timeout = nil) - unless timeout.nil? - raise NotImplementedError - end - result = pop(! block) - if result == DONE - # this guarantees that any other waiting threads or any future - # calls to get will also result in a Qpid::Closed exception - put(DONE) - raise Qpid::Closed.new(@error) - else - return result - end - end - - alias :put :push - - def exc_listen(&block) - @exc_listener_lock.synchronize do - @exc_listener = block - end - end - - def listen(&block) - if ! block_given? && @thread - put(STOP) - @thread.join() - @thread = nil - end - - # FIXME: There is a potential race since we could be changing one - # non-nil listener to another - @listener = block - - if block_given? && @thread.nil? - @thread = Thread.new do - loop do - begin - o = get() - break if o == STOP - @listener.call(o) - rescue Qpid::Closed => e - @exc_listener.call(e) if @exc_listener - break - end - end - end - end - end - -end |