summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/portage/dbapi/_MergeProcess.py6
-rw-r--r--pym/portage/dbapi/vartree.py28
2 files changed, 20 insertions, 14 deletions
diff --git a/pym/portage/dbapi/_MergeProcess.py b/pym/portage/dbapi/_MergeProcess.py
index 829a3d7ce..9be68d3f5 100644
--- a/pym/portage/dbapi/_MergeProcess.py
+++ b/pym/portage/dbapi/_MergeProcess.py
@@ -10,6 +10,7 @@ import errno
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
@@ -40,6 +41,11 @@ class MergeProcess(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:
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index edc477a09..beaeda730 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -4694,7 +4694,7 @@ class dblink(object):
"merge-sync" not in self.settings.features:
return
- syncfs = self._get_syncfs()
+ syncfs = _get_syncfs()
if syncfs is None:
try:
proc = subprocess.Popen(["sync"])
@@ -4716,19 +4716,6 @@ class dblink(object):
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):
"""
@@ -4907,6 +4894,19 @@ class dblink(object):
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,