import fcntl
import portage
from portage import os, _unicode_decode
+from portage.dbapi.vartree import _get_syncfs
import portage.elog.messages
from portage.util._async.ForkProcess import ForkProcess
settings.reset()
settings.setcpv(cpv, mydb=self.mydbapi)
+ # This caches the libc library lookup in the current
+ # process, so that it's only done once rather than
+ # for each child process.
+ _get_syncfs()
+
# Inherit stdin by default, so that the pdb SIGUSR1
# handler is usable for the subprocess.
if self.fd_pipes is None:
"merge-sync" not in self.settings.features:
return
- syncfs = self._get_syncfs()
+ syncfs = _get_syncfs()
if syncfs is None:
try:
proc = subprocess.Popen(["sync"])
finally:
os.close(fd)
- def _get_syncfs(self):
- if platform.system() == "Linux":
- filename = find_library("c")
- if filename is not None:
- library = LoadLibrary(filename)
- if library is not None:
- try:
- return library.syncfs
- except AttributeError:
- pass
-
- return None
-
def merge(self, mergeroot, inforoot, myroot=None, myebuild=None, cleanup=0,
mydbapi=None, prev_mtimes=None, counter=None):
"""
finally:
self.unlockdb()
+def _get_syncfs():
+ if platform.system() == "Linux":
+ filename = find_library("c")
+ if filename is not None:
+ library = LoadLibrary(filename)
+ if library is not None:
+ try:
+ return library.syncfs
+ except AttributeError:
+ pass
+
+ return None
+
def merge(mycat, mypkg, pkgloc, infloc,
myroot=None, settings=None, myebuild=None,
mytree=None, mydbapi=None, vartree=None, prev_mtimes=None, blockers=None,