deepstream.io-client-java icon indicating copy to clipboard operation
deepstream.io-client-java copied to clipboard

getRecord() method hangs on simultaneous request.

Open zebpaynikunj opened this issue 6 years ago • 0 comments

` @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.

zebpaynikunj avatar Feb 18 '19 11:02 zebpaynikunj