[ 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)