Vasil Dimov
f46b678acf
qt: lock cs_main, m_cached_tip_mutex in that order
...
Always lock the mutexes `cs_main` and `m_cached_tip_mutex` in
the same order: `cs_main`, `m_cached_tip_mutex`. Otherwise we may end up
in a deadlock.
`ClientModel::m_cached_tip_blocks` is protected by
`ClientModel::m_cached_tip_mutex`. There are two access paths that
lock the two mutexes in opposite order:
```
validation.cpp:2868 CChainState::ActivateBestChain(): lock cs_main
validation.cpp:2916 CChainState::ActivateBestChain(): call uiInterface.NotifyBlockTip()
ui_interface.cpp:52 CClientUIInterface::NotifyBlockTip(): go deep in boost
...
qt/clientmodel.cpp:255 BlockTipChanged(): lock m_cached_tip_mutex
```
and
```
qt/clientmodel.cpp:119 ClientModel::getBestBlockHash(): lock m_cached_tip_mutex
qt/clientmodel.cpp:121 ClientModel::getBestBlockHash(): call m_node.getBestBlockHash()
interfaces/node.cpp:200 NodeImpl::getBestBlockHash(): lock cs_main
```
From `debug.log`:
```
POTENTIAL DEADLOCK DETECTED
Previous lock order was:
m_cs_chainstate validation.cpp:2851
(1) cs_main validation.cpp:2868
::mempool.cs validation.cpp:2868
(2) clientmodel->m_cached_tip_mutex qt/clientmodel.cpp:255
Current lock order is:
(2) m_cached_tip_mutex qt/clientmodel.cpp:119
(1) ::cs_main interfaces/node.cpp:200
```
The possible deadlock was introduced in
https://github.com/bitcoin/bitcoin/pull/17993
2020-06-01 17:14:43 +02:00
..
2020-05-20 07:30:29 -04:00
2020-05-20 08:27:07 -04:00
2020-04-16 13:33:09 -04:00
2020-01-28 17:00:01 +01:00
2020-04-07 13:57:34 -07:00
2020-05-22 11:59:58 -04:00
2020-05-29 15:49:46 +02:00
2020-01-28 16:59:07 +01:00
2020-04-30 18:02:04 +08:00
2020-05-26 07:33:43 -04:00
2020-03-30 16:10:30 -07:00
2020-05-20 07:30:29 -04:00
2020-06-01 17:14:43 +02:00
2020-06-01 15:38:57 +08:00
2020-05-27 07:16:10 -04:00
2019-03-31 11:41:05 -07:00
2020-05-04 16:31:07 +02:00
2020-05-31 18:58:41 -04:00
2020-02-09 07:44:29 -08:00
2020-05-27 19:31:33 -04:00
2020-05-28 09:55:39 +03:00
2020-04-16 13:33:09 -04:00
2019-10-14 13:24:54 +03:00
2019-12-30 10:42:20 +13:00
2020-01-02 11:05:36 -08:00
2020-05-06 14:59:28 +02:00
2020-03-04 14:24:19 +01:00
2018-12-29 10:15:01 +01:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2018-11-05 17:03:11 +01:00
2019-12-30 10:42:20 +13:00
2020-03-10 09:52:53 -04:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2019-10-16 08:56:57 -07:00
2019-09-05 13:25:11 +12:00
2020-05-27 07:16:10 -04:00
2020-04-16 13:33:09 -04:00
2019-01-30 16:26:52 -05:00
2020-05-25 12:36:48 -04:00
2020-05-13 16:20:13 -04:00
2020-05-28 09:55:39 +03:00
2020-05-28 09:55:39 +03:00
2020-04-20 14:57:48 +00:00
2020-05-26 17:27:15 -04:00
2020-04-28 19:27:22 +02:00
2020-05-20 07:30:29 -04:00
2019-12-30 10:42:20 +13:00
2020-04-16 13:33:09 -04:00
2020-04-16 13:33:09 -04:00
2020-04-16 13:33:09 -04:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2020-04-03 16:29:26 +02:00
2020-04-16 13:33:09 -04:00
2020-05-04 19:53:58 +03:00
2018-07-27 07:15:02 -04:00
2020-05-03 18:42:14 +00:00
2020-05-06 13:15:28 +02:00
2019-01-23 16:28:27 +08:00
2019-12-30 10:42:20 +13:00
2020-04-16 13:33:09 -04:00
2019-12-30 10:42:20 +13:00
2018-07-27 07:15:02 -04:00
2020-05-22 01:40:31 +09:00
2019-12-30 10:42:20 +13:00
2020-04-08 14:45:27 +00:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2020-05-01 07:39:00 -04:00
2019-02-22 17:38:45 -08:00
2020-05-20 07:30:29 -04:00
2020-04-26 12:16:22 +12:00
2019-12-30 10:42:20 +13:00
2018-11-05 09:25:15 -08:00
2019-03-31 11:41:05 -07:00
2020-05-21 06:53:39 -04:00
2020-05-13 16:20:13 -04:00
2020-05-19 10:41:44 -04:00
2020-04-16 13:33:09 -04:00
2020-04-16 13:33:09 -04:00
2020-05-21 09:55:59 -04:00
2020-05-13 16:20:13 -04:00
2019-12-30 10:42:20 +13:00
2018-07-27 07:15:02 -04:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2018-07-27 07:15:02 -04:00
2020-05-28 09:54:24 +03:00
2020-05-28 09:54:24 +03:00
2020-05-27 14:51:49 +12:00
2020-04-21 15:06:59 +02:00
2020-01-28 17:01:48 +01:00
2020-05-12 18:03:39 +03:00
2020-04-01 12:49:15 +02:00
2020-05-12 09:47:06 -04:00
2019-11-21 21:13:08 +01:00
2020-04-05 01:01:13 +02:00
2020-04-05 10:46:24 +08:00
2020-05-30 10:37:01 +00:00
2020-04-16 13:33:09 -04:00
2020-03-30 16:09:51 -07:00
2020-03-30 16:09:51 -07:00
2020-04-16 13:33:09 -04:00
2020-04-16 13:33:09 -04:00
2020-01-08 12:35:59 +00:00
2020-04-16 13:33:09 -04:00
2020-05-31 18:20:17 -04:00
2020-05-21 09:55:58 -04:00
2019-10-29 11:30:12 +02:00
2020-05-29 18:24:09 +08:00
2020-05-27 19:31:33 -04:00
2020-05-06 14:59:28 +02:00
2020-05-20 07:30:29 -04:00
2020-01-22 20:20:45 +01:00
2020-01-08 12:35:59 +00:00
2018-07-27 07:15:02 -04:00
2020-05-05 04:45:59 +03:00
2020-05-05 04:45:59 +03:00
2019-12-30 10:42:20 +13:00
2020-04-16 13:33:09 -04:00
2020-01-23 16:35:06 -05:00
2018-07-27 07:15:02 -04:00
2018-07-27 07:15:02 -04:00
2020-04-30 18:02:03 +08:00
2020-05-31 18:20:17 -04:00
2020-05-31 18:20:17 -04:00
2020-04-16 13:33:09 -04:00
2020-05-27 12:37:08 -04:00
2019-12-30 10:42:20 +13:00
2020-04-23 13:59:48 -04:00
2020-05-15 08:58:49 -04:00
2020-04-30 09:19:14 -04:00
2020-04-16 13:33:09 -04:00
2019-11-12 14:50:44 -08:00
2020-05-21 06:53:39 -04:00
2018-07-24 20:46:23 +01:00
2020-04-16 13:33:09 -04:00
2020-03-10 09:47:32 -04:00
2020-05-24 10:35:00 -07:00
2020-04-30 11:16:56 +02:00
2019-12-30 10:42:20 +13:00
2020-05-28 09:55:04 +03:00
2020-05-28 09:55:04 +03:00
2018-08-31 16:00:38 +02:00
2019-12-30 10:42:20 +13:00
2020-05-28 09:54:24 +03:00
2020-05-05 04:45:59 +03:00
2018-07-27 07:15:02 -04:00
2019-12-06 10:02:08 +01:00
2020-01-08 12:35:59 +00:00
2019-12-30 10:42:20 +13:00
2020-05-20 07:30:29 -04:00
2020-01-15 02:18:00 +07:00
2020-04-29 16:32:37 +08:00
2020-05-25 11:27:07 -07:00
2020-05-19 02:49:32 +03:00
2020-05-19 02:49:32 +03:00
2020-01-23 16:35:08 -05:00
2020-01-23 16:35:08 -05:00
2020-04-16 13:33:09 -04:00
2020-05-25 11:27:07 -07:00
2020-05-21 09:56:25 -04:00
2020-05-13 19:57:55 -04:00
2020-05-13 19:57:55 -04:00
2018-07-27 07:15:02 -04:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2018-09-23 22:55:11 +02:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00
2019-12-30 10:42:20 +13:00