util: use Libc.memfd_create() when os.memfd_create() is missing
This provide compat for pyton versions below 3.8. This can be removed (together with the previous commit) once we are at python3.8+.
This commit is contained in:
parent
09e78c52d9
commit
478fee2876
1 changed files with 9 additions and 1 deletions
|
|
@ -13,12 +13,20 @@ import os
|
||||||
import socket
|
import socket
|
||||||
from typing import Any, List, Optional
|
from typing import Any, List, Optional
|
||||||
|
|
||||||
|
from .linux import Libc
|
||||||
from .types import PathLike
|
from .types import PathLike
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def memfd(name):
|
def memfd(name):
|
||||||
fd = os.memfd_create(name, 0)
|
if hasattr(os, "memfd_create"):
|
||||||
|
fd = os.memfd_create(name)
|
||||||
|
else:
|
||||||
|
# we can remove this "if/else" once we are at python3.8+
|
||||||
|
# and just use "os.memfd_create()"
|
||||||
|
libc = Libc.default()
|
||||||
|
fd = libc.memfd_create(name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
yield fd
|
yield fd
|
||||||
finally:
|
finally:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue