You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Apr 6, 2021. It is now read-only.
` @ObjectiveCName("getRecord:")
public Record getRecord( String name ) {
Record record = null;
recordsLock.lock();
try {
record = records.get( name );
if( record == null ) {
record = createRecord(name);
recordsLock.unlock();
record.start();
} else if (record.getAndIncrementUsage() <= 0) {
// Some other thread is discarding this record. We need the record out of the records
// map before we can put the new record there so we will finish the discard here. Either this
// thread or the other thread will end up finishing the discard.
record.finishDiscard();
assert records.get(name) == null;
record = createRecord(name);
recordsLock.unlock();
record.start();
}
} finally {
if (recordsLock.isHeldByCurrentThread()) {
recordsLock.unlock();
}
}
if (!record.isReady()) {
final CountDownLatch readyLatch = new CountDownLatch(1);
record.whenReady(new Record.RecordReadyListener() {
@Override
public void onRecordReady(String recordName, Record record) {
readyLatch.countDown();
}
});
try {
readyLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return record;
}`
this method does not return record object when more than one thread tried to access it.