[
https://issues.apache.org/jira/browse/THRIFT-4963?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
chenguang9239 updated THRIFT-4963:
----------------------------------
Description:
hello!
when using c++ TNonblockingServer(with thread pool),I found a dead lock in high
QPS status.
The worker thread will call notifyIOThread when it finishes its work, then call
TNonblockingIOThread::notify and wait for write event in poll without timeout.
If there is a write event, worker thread will return and release
threadManager->mutex;
The IO thread will call addTask when it gets requests. And IO threads will lock
the same mutex in addTask without a timeout, so IO thread can not write data to
socket, there is a dead lock.
I found there is no method to set a timeout of the locking operation in
addTask. Is it a bug of thrift 0.12.0?
was:
when using TNonblockingServer(with thread pool),I found a dead lock in high QPS
status.
The worker thread will call notifyIOThread when it finishes its work, then call
TNonblockingIOThread::notify and wait for write event in poll without timeout.
If there is a write event, worker thread will return and release
threadManager->mutex;
The IO thread will call addTask when it gets requests. And IO threads will lock
the same mutex in addTask without a timeout, so IO thread can not write data to
socket, there is a dead lock.
I found there is no method to set a timeout of the locking operation in
addTask. Is it a bug of thrift 0.12.0?
> TNonblockingServer dead lock between addTask(IOThread) and
> notify(workerThread)
> -------------------------------------------------------------------------------
>
> Key: THRIFT-4963
> URL: https://issues.apache.org/jira/browse/THRIFT-4963
> Project: Thrift
> Issue Type: Bug
> Affects Versions: 0.12.0
> Reporter: chenguang9239
> Priority: Major
>
> hello!
> when using c++ TNonblockingServer(with thread pool),I found a dead lock in
> high QPS status.
> The worker thread will call notifyIOThread when it finishes its work, then
> call TNonblockingIOThread::notify and wait for write event in poll without
> timeout. If there is a write event, worker thread will return and release
> threadManager->mutex;
> The IO thread will call addTask when it gets requests. And IO threads will
> lock the same mutex in addTask without a timeout, so IO thread can not write
> data to socket, there is a dead lock.
> I found there is no method to set a timeout of the locking operation in
> addTask. Is it a bug of thrift 0.12.0?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)