Jaskey Lam created ROCKETMQ-98:
----------------------------------

             Summary: Risk of unable to release putMessage Lock forever
                 Key: ROCKETMQ-98
                 URL: https://issues.apache.org/jira/browse/ROCKETMQ-98
             Project: Apache RocketMQ
          Issue Type: Bug
            Reporter: Jaskey Lam
            Assignee: vongosling


In current implemenation, there are two kind of locks dev can choose. If I 
choose reentrantLock, and lock it then put message, in this time I change the 
config through admin interface to use spin lock. When trying to unlock, 
rocketmq will try to unlock the spin lock though actually the reentrantlock is 
locked, this will cause the reentrantlock not able to release forever and 
trying to release the wrong spin lock but actully it is not locked!


    /**
     * Spin util acquired the lock.
     */
    private void lockForPutMessage() {
        if 
(this.defaultMessageStore.getMessageStoreConfig().isUseReentrantLockWhenPutMessage())
 {
            putMessageNormalLock.lock();
        } else {
            boolean flag;
            do {
                flag = this.putMessageSpinLock.compareAndSet(true, false);
            }
            while (!flag);
        }
    }

    private void releasePutMessageLock() {
        if 
(this.defaultMessageStore.getMessageStoreConfig().isUseReentrantLockWhenPutMessage())
 {
            putMessageNormalLock.unlock();
        } else {
            this.putMessageSpinLock.compareAndSet(false, true);
        }
    }



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to