Uploaded image for project: 'Commons Pool'
  1. Commons Pool
  2. POOL-303

GenericObjectPool's borrowObject may stuck if create() always fail

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 2.4.3
    • None

    Description

      If GenericObjectPool's user use borrowObject() to get the object. The pool will try to pollFirst() first and if there is no idle object it will try to create it. In create() if createCount > maxTotal, it will not create any object and wait on idleObjects.takeFirst() or idleObjects.pollFirst(borrowMaxWaitMillis, TimeUnit.MILLISECONDS) for other thread return an object.

      If there are many threads (the number is more than maxTotal) to borrowObject concurrently, there will only maxTotal threads go to create the object, the others will wait on the queue. However, if the factory has some problem that makeObject() always throw Exception, there will not be any object created so no thread will return the object that should send a signal to one waiting thread. The thread wait on idleObjects.takeFirst() will stuck forever because it has no timeout.

      I think it can be fixed by adding a idleObjects.interuptTakeWaiters(); in create() before it throws the exception and let the waiting threads interrupted and retry to create.

      It seems that all 2.x version affected?

      Attachments

        1. 303.txt
          2 kB
          Phil Yang

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            yangzhe1991 Phil Yang
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment