The buffer listeners are not notified when the the local buffer pool receives available notification from the global pool. This may cause potential deadlock issue:
- A LocalBufferPool is created, but there is no available buffers in the global NetworkBufferPool.
- The LocalBufferPool registers an available buffer listener to the global NetworkBufferPool.
- The BufferManager requests buffers from the LocalBufferPool but no buffer is available. As a result, it registers an available buffer listener to the LocalBufferPool.
- A buffer is recycled to the global pool and the local buffer pool is notified about the available buffer.
- The local buffer pool requests the available buffer from the global pool but the registered available buffer listener of BufferManager is not notified and it can never get a chance to be notified so deadlock occurs.