Return-Path: X-Original-To: apmail-hbase-issues-archive@www.apache.org Delivered-To: apmail-hbase-issues-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 02057E475 for ; Thu, 22 Nov 2012 07:43:02 +0000 (UTC) Received: (qmail 496 invoked by uid 500); 22 Nov 2012 07:43:00 -0000 Delivered-To: apmail-hbase-issues-archive@hbase.apache.org Received: (qmail 417 invoked by uid 500); 22 Nov 2012 07:42:59 -0000 Mailing-List: contact issues-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list issues@hbase.apache.org Received: (qmail 370 invoked by uid 99); 22 Nov 2012 07:42:58 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Nov 2012 07:42:58 +0000 Date: Thu, 22 Nov 2012 07:42:58 +0000 (UTC) From: "Hiroshi Ikeda (JIRA)" To: issues@hbase.apache.org Message-ID: <142392695.16072.1353570178589.JavaMail.jiratomcat@arcas> In-Reply-To: <1655112107.113047.1352883372238.JavaMail.jiratomcat@arcas> Subject: [jira] [Updated] (HBASE-7160) Improve IdLock and remove its minor defects MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/HBASE-7160?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Hiroshi Ikeda updated HBASE-7160: --------------------------------- Attachment: HBASE-7160-V3.patch Patch v3 from review board. > Improve IdLock and remove its minor defects > ------------------------------------------- > > Key: HBASE-7160 > URL: https://issues.apache.org/jira/browse/HBASE-7160 > Project: HBase > Issue Type: Improvement > Reporter: Hiroshi Ikeda > Assignee: Hiroshi Ikeda > Priority: Minor > Attachments: HBASE-7160.patch, HBASE-7160-V2.patch, HBASE-7160-V3.patch > > > Combination of synchronizations and concurrent collections complicates the code, and it is hard to trace the code and to confirm its correctness. We should re-create the class and make it more understandable. > In the current code, I find the following minor defects: > (1) In the case that there is a waiting thread for a lock in getLockEntry() and another thread is releasing the lock by calling releaseLockEntry(), trying to get the lock with a 3rd thread by calling getLockEntry() falls into a busy loop until the waiting thread wakes up and gets the lock. > Even if notify() wakes up the blocked thread and causes a context switch to the waked thread immediately, synchronization might block the waked thread and cause another context switch, and the busy loop might continue for a while. > (2) In the same case as (1), since releasing the lock is merely notifying without removing the lock-entry from the map, interrupting the waiting thread might leave an unused lock-entry (entry.numWaiters == 0) in the map. This is a memory leak unless the id of the lock is used again. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira