-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve manager #156
Improve manager #156
Conversation
- use "bracket" - ignore "KilledByHttp2ThreadManager" only as "KilledByHttp2ThreadManager" is thrown here
ensuring that only one asynchronous exception is thrown
I confirmed that
|
I'm going to merge this PR. |
myWeakThradId = do | ||
tid <- myThreadId | ||
wtid <- mkWeakThreadId tid | ||
let n = read (drop 9 $ show tid) -- drop "ThreadId " |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kazu-yamamoto I am late to the party but there’s fromThreadId in base. It allows you to get a stable integer identifier of a thread without resorting to the show instance.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I cannot find fromThreadId
anywhere?
Which module exports it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fromThreadId
is very new, sigh.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FWIW, I don't think the weak references are strictly necessary. Provided that we keep the Map
in WHNF, and we remove entries whenever the corresponding threads die, we should not be unnecessarily retaining any threads.
You are right in the current code. The old |
# ChangeLog for http2 ## 5.3.9 * Using `ThreadManager` of `time-manager`. ## 5.3.8 * `forkManagedTimeout` ensures that only one asynchronous exception is thrown. Fixing the thread leak via `Weak ThreadId` and `modifyTVar'`. [#156](kazu-yamamoto/http2#156) ## 5.3.7 * Using `withHandle` of time-manager. * Getting `Handle` for each thread. * Providing allocSimpleConfig' to enable customizing WAI tiemout manager. * Monitor option (-m) for h2c-client and h2c-server. ## 5.3.6 * Making `runIO` friendly with the new synchronism mechanism. [#152](kazu-yamamoto/http2#152) * Re-throwing asynchronous exceptions to prevent thread leak. * Simplifying the synchronism mechanism between workers and the sender. [#148](kazu-yamamoto/http2#148) ## 5.3.5 * Using `http-semantics` v0.3. * Deprecating `numberOfWorkers`. * Removing `unliftio`. * Avoid `undefined` in client. [#146](kazu-yamamoto/http2#146) ## 5.3.4 * Support stream cancellation [#142](kazu-yamamoto/http2#142) ## 5.3.3 * Enclosing IPv6 literal authority with square brackets. [#143](kazu-yamamoto/http2#143) ## 5.3.2 * Avoid unnecessary empty data frames at end of stream [#140](kazu-yamamoto/http2#140) * Removing unnecessary API from ServerIO ## 5.3.1 * Fix treatment of async exceptions [#138](kazu-yamamoto/http2#138) * Avoid race condition [#137](kazu-yamamoto/http2#137) ## 5.3.0 * New server architecture: spawning worker on demand instead of the worker pool. This reduce huge numbers of threads for streaming into only 2. No API changes but workers do not terminate quicly. Rather workers collaborate with the sender after queuing a response and finish after all response data are sent. * All threads are labeled with `labelThread`. You can see them by `listThreas` if necessary. ## 5.2.6 * Recover rxflow on closing. [#126](kazu-yamamoto/http2#126) * Fixing ClientSpec for stream errors. * Allowing negative window. (h2spec http2/6.9.2) * Update for latest http-semantics [#122](kazu-yamamoto/http2#124) ## 5.2.5 * Setting peer initial window size properly. [#123](kazu-yamamoto/http2#123) ## 5.2.4 * Update for latest http-semantics [#122](kazu-yamamoto/http2#122) * Measuring performance concurrently for h2c-client ## 5.2.3 * Update for latest http-semantics [#120](kazu-yamamoto/http2#120) * Enable containers 0.7 (ghc 9.10) [#117](kazu-yamamoto/http2#117) ## 5.2.2 * Mark final chunk as final [#116](kazu-yamamoto/http2#116)
forkManagedTimeout
ensures that only one asynchronous exception is thrown with a lock ofIORef Bool
. (relating to Avoid race condition #136, Avoid race condition #137)Weak ThreadId
andmodifyTVar'
(relating to Memory leak in http 5.3.6 #154)TimeoutThread
andKilledByHttp2ThreadManager
are caught cleanly (relating to Unexpected "Thread killed by timeout manager" in 5.3.6 #153)