Don't fail on two threads wanting to lock the same PeerInfo
This commit is contained in:
parent
56a56503d6
commit
44330fbd74
|
@ -34,6 +34,7 @@ package org.lwjgl.opengl;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
import org.lwjgl.LWJGLException;
|
import org.lwjgl.LWJGLException;
|
||||||
|
import org.lwjgl.LWJGLUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* $Id$
|
* $Id$
|
||||||
|
@ -63,6 +64,7 @@ abstract class PeerInfo {
|
||||||
if (lock_count == 0) {
|
if (lock_count == 0) {
|
||||||
doUnlock();
|
doUnlock();
|
||||||
locking_thread = null;
|
locking_thread = null;
|
||||||
|
notify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,8 +73,13 @@ abstract class PeerInfo {
|
||||||
|
|
||||||
public synchronized final ByteBuffer lockAndGetHandle() throws LWJGLException {
|
public synchronized final ByteBuffer lockAndGetHandle() throws LWJGLException {
|
||||||
Thread this_thread = Thread.currentThread();
|
Thread this_thread = Thread.currentThread();
|
||||||
if (locking_thread != null && locking_thread != this_thread)
|
while (locking_thread != null && locking_thread != this_thread) {
|
||||||
throw new IllegalStateException("PeerInfo already locked by " + locking_thread);
|
try {
|
||||||
|
wait();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
LWJGLUtil.log("Interrupted while waiting for PeerInfo lock: " + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (lock_count == 0) {
|
if (lock_count == 0) {
|
||||||
locking_thread = this_thread;
|
locking_thread = this_thread;
|
||||||
doLockAndInitHandle();
|
doLockAndInitHandle();
|
||||||
|
|
Loading…
Reference in New Issue