Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 21509
Collapse All | Expand All

(-)a/bin/emerge (+20 lines)
Lines 2890-2896 class MergeTask(object): Link Here
2890
			self.pkgsettings["/"] = \
2890
			self.pkgsettings["/"] = \
2891
				portage.config(clone=trees["/"]["vartree"].settings)
2891
				portage.config(clone=trees["/"]["vartree"].settings)
2892
2892
2893
	def _signal_handler(self, signum, frame):
2894
		self._interrupt_count += 1
2895
		if self._interrupt_count > 1:
2896
			signal.signal(signal.SIGINT, signal.SIG_IGN)
2897
			signal.signal(signal.SIGTERM, signal.SIG_IGN)
2898
			portage.writemsg(
2899
				"\n\nExiting on signal %(signal)s\n" % {"signal":signum})
2900
			sys.exit(100+signum)
2901
		else:
2902
			portage.writemsg(
2903
				"\n\nCaught signal: waiting until this ebuild finishes..." + \
2904
				" Try again to force stop now\n", noiselevel=-1)
2905
2893
	def merge(self, mylist, favorites, mtimedb):
2906
	def merge(self, mylist, favorites, mtimedb):
2907
2908
		self._interrupt_count = 0
2909
		signal.signal(signal.SIGINT, self._signal_handler)
2910
		signal.signal(signal.SIGTERM, self._signal_handler)
2911
2894
		failed_fetches = []
2912
		failed_fetches = []
2895
		mymergelist=[]
2913
		mymergelist=[]
2896
		ldpath_mtimes = mtimedb["ldpath"]
2914
		ldpath_mtimes = mtimedb["ldpath"]
Lines 3302-3307 class MergeTask(object): Link Here
3302
			# in the event that portage is not allowed to exit normally
3320
			# in the event that portage is not allowed to exit normally
3303
			# due to power failure, SIGKILL, etc...
3321
			# due to power failure, SIGKILL, etc...
3304
			mtimedb.commit()
3322
			mtimedb.commit()
3323
			if self._interrupt_count:
3324
				break
3305
3325
3306
		if "--pretend" not in self.myopts:
3326
		if "--pretend" not in self.myopts:
3307
			emergelog(xterm_titles, " *** Finished. Cleaning up...")
3327
			emergelog(xterm_titles, " *** Finished. Cleaning up...")
(-)a/pym/portage.py (-2 / +17 lines)
Lines 2246-2258 def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, **keyw Link Here
2246
2246
2247
	while mypids:
2247
	while mypids:
2248
		pid = mypids.pop(0)
2248
		pid = mypids.pop(0)
2249
		retval = os.waitpid(pid, 0)[1]
2249
		while True:
2250
			try:
2251
				retval = os.waitpid(pid, 0)[1]
2252
				break
2253
			except OSError, e:
2254
				if e.errno != errno.EINTR:
2255
					raise
2256
				del e
2250
		portage_exec.spawned_pids.remove(pid)
2257
		portage_exec.spawned_pids.remove(pid)
2251
		if retval != os.EX_OK:
2258
		if retval != os.EX_OK:
2252
			for pid in mypids:
2259
			for pid in mypids:
2253
				if os.waitpid(pid, os.WNOHANG) == (0,0):
2260
				if os.waitpid(pid, os.WNOHANG) == (0,0):
2261
					import signal
2254
					os.kill(pid, signal.SIGTERM)
2262
					os.kill(pid, signal.SIGTERM)
2255
					os.waitpid(pid, 0)
2263
					while True:
2264
						try:
2265
							os.waitpid(pid, 0)
2266
							break
2267
						except OSError, e:
2268
							if e.errno != errno.EINTR:
2269
								raise
2270
							del e
2256
				portage_exec.spawned_pids.remove(pid)
2271
				portage_exec.spawned_pids.remove(pid)
2257
			if retval & 0xff:
2272
			if retval & 0xff:
2258
				return (retval & 0xff) << 8
2273
				return (retval & 0xff) << 8

Return to bug 21509