summaryrefslogtreecommitdiff
path: root/lib/git/async/util.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2010-06-08 16:47:48 +0200
committerSebastian Thiel <byronimo@gmail.com>2010-06-08 16:47:48 +0200
commit619c11787742ce00a0ee8f841cec075897873c79 (patch)
tree7cfcc718c049b26abedf280bebb6c65a6d6f619c /lib/git/async/util.py
parent53152a824f5186452504f0b68306d10ebebee416 (diff)
downloadgitpython-619c11787742ce00a0ee8f841cec075897873c79.tar.gz
Its getting better already - intermediate commit before further chaning the task class
Diffstat (limited to 'lib/git/async/util.py')
-rw-r--r--lib/git/async/util.py25
1 files changed, 10 insertions, 15 deletions
diff --git a/lib/git/async/util.py b/lib/git/async/util.py
index 51219cc4..6d09de59 100644
--- a/lib/git/async/util.py
+++ b/lib/git/async/util.py
@@ -63,7 +63,7 @@ class SyncQueue(deque):
except IndexError:
raise Empty
# END raise empty
-
+
def empty(self):
return len(self) == 0
@@ -86,13 +86,13 @@ class HSCondition(object):
self._waiters = list()
def release(self):
- return self._lock.release()
+ self._lock.release()
def acquire(self, block=None):
if block is None:
self._lock.acquire()
else:
- return self._lock.acquire(block)
+ self._lock.acquire(block)
def wait(self, timeout=None):
waiter = _allocate_lock()
@@ -145,6 +145,7 @@ class HSCondition(object):
except IndexError:
pass
else:
+ print "notify", waiters, n
for waiter in waiters[:n]:
waiter.release()
try:
@@ -156,16 +157,6 @@ class HSCondition(object):
def notify_all(self):
self.notify(len(self._waiters))
-
-class _AsyncQueue(Queue):
- """A queue using different condition objects to gain multithreading performance"""
- def __init__(self, maxsize=0):
- Queue.__init__(self, maxsize)
-
- self.not_empty = HSCondition(self.mutex)
- self.not_full = HSCondition(self.mutex)
- self.all_tasks_done = HSCondition(self.mutex)
-
class ReadOnly(Exception):
"""Thrown when trying to write to a read-only queue"""
@@ -205,11 +196,12 @@ class AsyncQueue(Queue):
self._writable = state
return old
finally:
+ self.mutex.release()
+
# if we won't receive anymore items, inform the getters
if not state:
self.not_empty.notify_all()
# END tell everyone
- self.mutex.release()
# END handle locking
def empty(self):
@@ -222,6 +214,7 @@ class AsyncQueue(Queue):
def put(self, item, block=True, timeout=None):
self.mutex.acquire()
if not self._writable:
+ self.mutex.release()
raise ReadOnly
# END handle read-only
self.queue.append(item)
@@ -245,7 +238,9 @@ class AsyncQueue(Queue):
self.not_empty.wait(remaining)
# END handle timeout mode
# END handle block
- # can happen if we woke up because we are not writable anymore
+
+ # can throw if we woke up because we are not writable anymore
+ print len(q), id(q), current_thread()
try:
return q.popleft()
except IndexError: