Skip to content
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

Handle leak by open-output-string on Windows #951

Closed
Hamayama opened this issue Oct 21, 2023 · 3 comments
Closed

Handle leak by open-output-string on Windows #951

Hamayama opened this issue Oct 21, 2023 · 3 comments

Comments

@Hamayama
Copy link
Contributor

以下の処理で、Windows のハンドル数が増加します (添付画像)。

(let loop () (open-output-string) (loop))

ハンドル数が、16,000,000 くらいまでいくと、
Gauche が強制的に終了します (エラー等は出ない) 。

Gauche 0.9.13 で発生します。

Gauche 0.9.12 以前では発生しません (6000 くらいまでは増加しますが、GC に回収されます)

open-output-string は、number->string でも使われているみたいで、
(x->string 数値) で気が付きました。

#900 の関連かとも思いますが、
ちょっとよく分からないので、まずは情報として挙げておきます。

<添付画像>
taskmng1

@shirok
Copy link
Owner

shirok commented Oct 21, 2023

Thanks for reporting. open-output-string は純粋にメモリ上の操作でファイルハンドルは使ってないはずなんですが、妙ですね…

@shirok
Copy link
Owner

shirok commented Oct 21, 2023

あー多分わかりました。

  • コミット 1ed58ae で、文字列ポートではファイナライザを呼ばないようにした (かなり速くなる)
  • だが、MinGWではポートのfastlockにも通常のmutexが使われていて、これはハンドルを消費する。closeが呼ばれないとこのハンドルが回収されない。

shirok added a commit that referenced this issue Oct 21, 2023
This is a temporary measure.  We plan to implement cleanup-free
fastlock on Windows so that string ports won't need a finalizer.
Cf. #951
@Hamayama
Copy link
Contributor Author

ありがとうございます。

コミット c1bf6bb (2023-10-21) で、修正されていることを確認しました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants