Package java.util.concurrent.locks

Examples of java.util.concurrent.locks.Lock


                                             blockOffset, length));

    Block block = readBlock(addressToBlockId(blockAddress));

    try {
      Lock lock = block.getWriteLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        byte []blockBuffer = block.getBuffer();

        int blockTail = blockOffset;

        for (int i = 0; i < charLength; i++) {
          char ch = buffer[offset + i];

          blockBuffer[blockTail] = (byte) (ch >> 8);
          blockBuffer[blockTail + 1] = (byte) (ch);

          blockTail += 2;
        }

        block.setDirty(blockOffset, blockTail);
       
        return block;
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here


    throws IOException
  {
    Block block = readBlock(addressToBlockId(blockAddress));

    try {
      Lock lock = block.getWriteLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        byte []blockBuffer = block.getBuffer();

        writeLong(blockBuffer, offset, value);

        block.setDirty(offset, offset + 8);
       
        return block;
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here

    }

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getReadLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        System.arraycopy(blockBuffer, blockOffset + fragmentOffset,
                         buffer, offset, length);

        return length;
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here

    }

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getReadLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);
        blockOffset += fragmentOffset;

        byte []blockBuffer = block.getBuffer();

        for (int i = 0; i < length; i++) {
          int ch1 = blockBuffer[blockOffset] & 0xff;
          int ch2 = blockBuffer[blockOffset + 1] & 0xff;

          buffer[offset + i] = (char) ((ch1 << 8) + ch2);

          blockOffset += 2;
        }

        return length;
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here

    throws IOException
  {
    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getReadLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        return readLong(blockBuffer, blockOffset + fragmentOffset);
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here

      try {
        byte []blockBuffer = block.getBuffer();
        int freeOffset = -1;

        Lock lock = block.getWriteLock();
        lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

        try {
          for (int i = 0; i < MINI_FRAG_PER_BLOCK; i++) {
            int offset = i / 8 + MINI_FRAG_ALLOC_OFFSET;
            int mask = 1 << (i % 8);

            if ((blockBuffer[offset] & mask) == 0) {
              fragOffset = i;
              blockBuffer[offset] |= mask;
              block.setDirty(offset, offset + 1);
              break;
            }
          }

          // fragment allocated underneath us
          if (fragOffset < 0)
            continue;

          for (int i = 0; i < MINI_FRAG_PER_BLOCK; i++) {
            int offset = i / 8 + MINI_FRAG_ALLOC_OFFSET;
            int mask = 1 << (i % 8);

            if ((blockBuffer[offset] & mask) == 0) {
              freeOffset =
                (int) (ALLOC_BYTES_PER_BLOCK * (blockAddr / BLOCK_SIZE));
              break;
            }
          }
        } finally {
          lock.unlock();
        }

        if (freeOffset >= 0) {
          synchronized (_allocationLock) {
            _allocationTable[freeOffset + 1] = 0;
View Full Code Here

    throws IOException
  {
    Block block = readBlock(fragmentAddress);

    try {
      Lock lock = block.getWriteLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        int fragIndex = (int) (fragmentAddress & BLOCK_OFFSET_MASK);
        int offset = fragIndex / 8 + MINI_FRAG_ALLOC_OFFSET;
        int mask = 1 << (fragIndex % 8);
        byte []blockBuffer = block.getBuffer();

        blockBuffer[offset] &= ~mask;
        block.setDirty(offset, offset + 1);

        int i = (int) (ALLOC_BYTES_PER_BLOCK * (fragmentAddress / BLOCK_SIZE));
        // int j = (int) (fragmentAddress & 0xff);

        synchronized (_allocationLock) {
          int fragMask = _allocationTable[i + 1] & 0xff;
          //System.out.println((fragmentAddress / BLOCK_SIZE) + ":" + j + " DELETE");

          if (_allocationTable[i] != ALLOC_MINI_FRAG)
            System.out.println("BAD ENTRY: " + fragMask);

          _allocationTable[i + 1] = 0;

          _miniFragmentUseCount--;

          setAllocDirty(i + 1, i + 2);
        }
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here

                                             fragmentOffset, length));

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getWriteLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        blockOffset += fragmentOffset;

        System.arraycopy(buffer, offset,
                         blockBuffer, blockOffset,
                         length);

        block.setDirty(blockOffset, blockOffset + length);
       
        return block;
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here

                                             fragmentOffset, length));

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getWriteLock();
      lock.tryLock(_blockLockTimeout, TimeUnit.MILLISECONDS);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        blockOffset += fragmentOffset;

        int blockTail = blockOffset;

        for (int i = 0; i < length; i++) {
          char ch = buffer[offset + i];

          blockBuffer[blockTail] = (byte) (ch >> 8);
          blockBuffer[blockTail + 1] = (byte) (ch);

          blockTail += 2;
        }

        block.setDirty(blockOffset, blockTail);
       
        return block;
      } finally {
        lock.unlock();
      }
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    } finally {
      block.free();
View Full Code Here

  }

  private int allocateRow(Block block, DbTransaction xa)
    throws IOException, SQLException, InterruptedException
  {
    Lock blockLock = block.getWriteLock();

    blockLock.tryLock(xa.getTimeout(), TimeUnit.MILLISECONDS);
    try {
      block.read();

      byte []buffer = block.getBuffer();

      int rowOffset = 0;

      for (; rowOffset < _rowEnd; rowOffset += _rowLength) {
        if (buffer[rowOffset] == 0) {
          buffer[rowOffset] = ROW_ALLOC;

          block.setDirty(rowOffset, rowOffset + 1);

          return rowOffset;
        }
      }
    } finally {
      blockLock.unlock();
    }

    return -1;
  }
View Full Code Here

TOP

Related Classes of java.util.concurrent.locks.Lock

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.