Revision 73c25d35
b/test/ganeti.locking_unittest.py | ||
---|---|---|
1503 | 1503 |
tlock.release() |
1504 | 1504 |
|
1505 | 1505 |
# Test shared acquire |
1506 |
def _Acquire(lock, shared, ev): |
|
1506 |
def _Acquire(lock, shared, ev, notify):
|
|
1507 | 1507 |
lock.acquire(shared=shared) |
1508 | 1508 |
try: |
1509 |
notify.set() |
|
1509 | 1510 |
ev.wait() |
1510 | 1511 |
finally: |
1511 | 1512 |
lock.release() |
... | ... | |
1513 | 1514 |
for tlock1 in locks[::11]: |
1514 | 1515 |
for tlock2 in locks[::-15]: |
1515 | 1516 |
if tlock2 == tlock1: |
1517 |
# Avoid deadlocks |
|
1516 | 1518 |
continue |
1517 | 1519 |
|
1518 | 1520 |
for tlock3 in locks[::10]: |
1519 |
if tlock3 == tlock2: |
|
1521 |
if tlock3 in (tlock2, tlock1): |
|
1522 |
# Avoid deadlocks |
|
1520 | 1523 |
continue |
1521 | 1524 |
|
1522 |
ev = threading.Event() |
|
1525 |
releaseev = threading.Event()
|
|
1523 | 1526 |
|
1524 | 1527 |
# Acquire locks |
1528 |
acquireev = [] |
|
1525 | 1529 |
tthreads1 = [] |
1526 | 1530 |
for i in range(3): |
1531 |
ev = threading.Event() |
|
1527 | 1532 |
tthreads1.append(self._addThread(target=_Acquire, |
1528 |
args=(tlock1, 1, ev))) |
|
1529 |
tthread2 = self._addThread(target=_Acquire, args=(tlock2, 1, ev)) |
|
1530 |
tthread3 = self._addThread(target=_Acquire, args=(tlock3, 0, ev)) |
|
1533 |
args=(tlock1, 1, releaseev, ev))) |
|
1534 |
acquireev.append(ev) |
|
1535 |
|
|
1536 |
ev = threading.Event() |
|
1537 |
tthread2 = self._addThread(target=_Acquire, |
|
1538 |
args=(tlock2, 1, releaseev, ev)) |
|
1539 |
acquireev.append(ev) |
|
1540 |
|
|
1541 |
ev = threading.Event() |
|
1542 |
tthread3 = self._addThread(target=_Acquire, |
|
1543 |
args=(tlock3, 0, releaseev, ev)) |
|
1544 |
acquireev.append(ev) |
|
1545 |
|
|
1546 |
# Wait for all locks to be acquired |
|
1547 |
for i in acquireev: |
|
1548 |
i.wait() |
|
1531 | 1549 |
|
1532 | 1550 |
# Check query result |
1533 | 1551 |
for (name, mode, owner) in self.lm.QueryLocks(["name", "mode", |
... | ... | |
1552 | 1570 |
self.assert_(owner is None) |
1553 | 1571 |
|
1554 | 1572 |
# Release locks again |
1555 |
ev.set() |
|
1573 |
releaseev.set()
|
|
1556 | 1574 |
|
1557 | 1575 |
self._waitThreads() |
1558 | 1576 |
|
Also available in: Unified diff