haskell-jp / questions #96 at 2021-04-22 14:00:13 +0900

bracket の第二引数(資源解放)で STM を利用すると、デッドロックを起こすことがあるのは、よく知られたことですか?
具体例はありますか?むしろ、STMを使えばデッドロックが起きないように記述しやすいと思うのですが
僕の quic ライブラリでは 100% 再現します。STM を IORef にすると、デッドロックはなくなります。
Note that cancel will not terminate until the thread the Async refers to has terminated. This means that cancel will block for as long said thread blocks when receiving an asynchronous exception.

For example, it could block if:

It's executing a foreign call, and thus cannot receive the asynchronous exception;
It's executing some cleanup handler after having received the exception, and the handler is blocking.
async ライブラリには上記の記述があります。block には STM の block も含まれるのでしょう。
close の STM が、どうして block するのかは、不明なんですが。。。
「STM を IORefをすると」というのは、TVarのことを指していますか?また、closeのSTMとは何を指していますか?
「TVar を IORef にする」「bracket の第二引数」という意味でした。
bracketの第二引数はTVarの操作だけでしょうか?`<|> pure ()`を加えるとどうなりますか