title: java.lang.IllegalMonitorStateException: Current thread is not owner of the lock
body: <p>I upgraded my hazelcast from 2.4 to 3.3, but this exception occurred.</p>
  
  <pre><code>13:12:51,269 [Thread-21]: ERROR xx.xx.xxThread:1783 - run:
  java.lang.IllegalMonitorStateException: Current thread is not owner of the lock! -&gt; &lt;not-locked&gt;
      at com.hazelcast.concurrent.lock.operations.UnlockOperation.ensureUnlocked(UnlockOperation.java:71)
      at com.hazelcast.concurrent.lock.operations.UnlockOperation.unlock(UnlockOperation.java:65)
      at com.hazelcast.concurrent.lock.operations.UnlockOperation.run(UnlockOperation.java:57)
      at com.hazelcast.spi.impl.BasicOperationService$OperationHandler.handle(BasicOperationService.java:699)
      at com.hazelcast.spi.impl.BasicOperationService$OperationHandler.access$400(BasicOperationService.java:675)
      at com.hazelcast.spi.impl.BasicOperationService$OperationPacketHandler.handle(BasicOperationService.java:649)
      at com.hazelcast.spi.impl.BasicOperationService$OperationPacketHandler.handle(BasicOperationService.java:604)
      at com.hazelcast.spi.impl.BasicOperationService$OperationPacketHandler.access$1400(BasicOperationService.java:591)
      at com.hazelcast.spi.impl.BasicOperationService$BasicDispatcherImpl.dispatch(BasicOperationService.java:543)
      at com.hazelcast.spi.impl.BasicOperationScheduler$OperationThread.process(BasicOperationScheduler.java:439)
      at com.hazelcast.spi.impl.BasicOperationScheduler$OperationThread.doRun(BasicOperationScheduler.java:433)
      at com.hazelcast.spi.impl.BasicOperationScheduler$OperationThread.run(BasicOperationScheduler.java:408)
      at ------ End remote and begin local stack-trace ------.(Unknown Source)
      at com.hazelcast.spi.impl.BasicInvocationFuture.resolveApplicationResponse(BasicInvocationFuture.java:356)
      at com.hazelcast.spi.impl.BasicInvocationFuture.resolveApplicationResponseOrThrowException(BasicInvocationFuture.java:289)
      at com.hazelcast.spi.impl.BasicInvocationFuture.get(BasicInvocationFuture.java:181)
      at com.hazelcast.spi.impl.BasicInvocationFuture.get(BasicInvocationFuture.java:160)
      at com.hazelcast.spi.impl.BasicInvocationFuture.getSafely(BasicInvocationFuture.java:172)
      at com.hazelcast.concurrent.lock.LockProxySupport.unlock(LockProxySupport.java:126)
      at com.hazelcast.concurrent.lock.LockProxy.unlock(LockProxy.java:99)
      at activesync.server.CheckLoginsThread.run(CheckLoginsThread.java:1552)
  </code></pre>
  
  <p>The change for getLock in 3.3 is that the String is required as the parameter in new version. I just changed it from Object to String, nothing else is changed. The code is as below:</p>
  
  <pre><code>Map logins = MyHazelcast.getMap("logins");
  Lock lock = MyHazelcast.getLock("logins");
  lock.lock();
  try
  {
       // do something...
  }
  finally
  {
      lock.unlock();
  }  
  </code></pre>
  
  <p>Is this caused by the new version or I missed something?</p>