[Python-checkins] CVS: python/dist/src/Modules posixmodule.c,2.190,2.191

Thomas Wouters twouters@users.sourceforge.net
2001年7月11日 07:45:37 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv5710/Modules
Modified Files:
	posixmodule.c 
Log Message:
Patch #439995 (slightly modified from the uploaded version):
Work around Linux's nonstandard nice() systemcall, which does not return the
new priority.
This closes SF bug #439990.
Index: posixmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v
retrieving revision 2.190
retrieving revision 2.191
diff -C2 -r2.190 -r2.191
*** posixmodule.c	2001年05月14日 22:32:33	2.190
--- posixmodule.c	2001年07月11日 14:45:34	2.191
***************
*** 1122,1127 ****
 	if (!PyArg_ParseTuple(args, "i:nice", &increment))
 		return NULL;
 	value = nice(increment);
! 	if (value == -1)
 		return posix_error();
 	return PyInt_FromLong((long) value);
--- 1122,1144 ----
 	if (!PyArg_ParseTuple(args, "i:nice", &increment))
 		return NULL;
+ 
+ 	/* There are two flavours of 'nice': one that returns the new
+ 	 priority (as required by almost all standards out there) and the
+ 	 Linux one, which returns '0' on success and advices the use of
+ 	 getpriority() to get the new priority.
+ 	 
+ 	 If we are of the nice family that returns the new priority, we
+ 	 need to clear errno before the call, and check if errno is filled
+ 	 before calling posix_error() on a returnvalue of -1, because the
+ 	 -1 may be the actual new priority! */
+ 
+ 	errno = 0;
 	value = nice(increment);
! #ifdef HAVE_GETPRIORITY
! 	if (value == 0)
! 		value = getpriority(PRIO_PROCESS, 0);
! #endif
! 	if (value == -1 && errno != 0)
! 		/* either nice() or getpriority() returned an error */
 		return posix_error();
 	return PyInt_FromLong((long) value);

AltStyle によって変換されたページ (->オリジナル) /