Skip to content

Close mmap files when a MmapedDict is discarded - #1235

Open
Shaisolaris wants to merge 3 commits into
prometheus:masterfrom
Shaisolaris:close-mmap-dict
Open

Shaisolaris wants to merge 3 commits into
prometheus:masterfrom
Shaisolaris:close-mmap-dict

Conversation

@Shaisolaris

Copy link
Copy Markdown

Fixes #1008.

Dropping a MmapedDict without close() left the backing file open. CPython then reports ResourceWarning: unclosed file. Growing the map also replaced the previous mmap without closing it.

close() now closes the map and the file independently, del calls close(), and growth closes the previous map before mapping the larger file.

Tested against a copy of prometheus_client/mmap_dict.py on Python 3.14.7. Before the change, deleting the object after write_value emitted ResourceWarning for the unclosed file. After the change, the same sequence emits no warning, and 40 values written through two growth steps read back correctly.

Dropping the object without close() left the backing file open, so CPython reported an unclosed-file ResourceWarning. Growing the map also replaced the previous mmap without closing it.

Close the previous map before a larger map is created, and close both the map and the file from close() and __del__.

Signed-off-by: Shai <66793913+Shaisolaris@users.noreply.github.com>
Cover the unclosed-file warning and values written through a map growth.

Signed-off-by: Shai <66793913+Shaisolaris@users.noreply.github.com>
Growing the map replaced the previous mmap without closing it. close() now closes the map and the file independently, and __del__ calls close().

Signed-off-by: Shai <66793913+Shaisolaris@users.noreply.github.com>

This branch has not been deployed

No deployments
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

Successfully merging this pull request may close these issues.

Use of MmapedDict results in fd leaks (resource leaks)

1 participant