Author: robertj
Date: 2007-08-23 02:13:25 -0400 (Thu, 23 Aug 2007)
New Revision: 84678
Modified:
trunk/mono/ChangeLog
trunk/mono/configure.in
trunk/mono/mono/io-layer/ChangeLog
trunk/mono/mono/io-layer/processes.c
trunk/mono/mono/io-layer/processes.h
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/icall-def.h
trunk/mono/mono/metadata/process.c
trunk/mono/mono/metadata/process.h
Log:
In .:
2007-08-23 Robert Jordan <[EMAIL PROTECTED]>
* configure.in: add get|setpriority detection.
In mono/io-layer:
2007-08-23 Robert Jordan <[EMAIL PROTECTED]>
* processes.[c|h]: Implement Get|SetPriorityClass ().
Code is contributed under MIT/X11 license.
In mono/metadata:
2007-08-23 Robert Jordan <[EMAIL PROTECTED]>
* icall-def.h, process.*: implemented Get|SetPriorityClass icalls.
Code is contributed under MIT/X11 license.
Modified: trunk/mono/ChangeLog
===================================================================
--- trunk/mono/ChangeLog 2007-08-23 05:47:48 UTC (rev 84677)
+++ trunk/mono/ChangeLog 2007-08-23 06:13:25 UTC (rev 84678)
@@ -1,4 +1,8 @@
+2007-08-23 Robert Jordan <[EMAIL PROTECTED]>
+
+ * configure.in: add get|setpriority detection.
+
Mon Aug 20 15:23:01 CEST 2007 Paolo Molaro <[EMAIL PROTECTED]>
* configure.in: use more symbol renaming fo OSX (bug #82463).
Modified: trunk/mono/configure.in
===================================================================
--- trunk/mono/configure.in 2007-08-23 05:47:48 UTC (rev 84677)
+++ trunk/mono/configure.in 2007-08-23 06:13:25 UTC (rev 84678)
@@ -774,6 +774,8 @@
AC_CHECK_FUNCS(mmap)
AC_CHECK_FUNCS(madvise)
AC_CHECK_FUNCS(getrusage)
+ AC_CHECK_FUNCS(getpriority)
+ AC_CHECK_FUNCS(setpriority)
AC_CHECK_FUNCS(sched_setaffinity)
Modified: trunk/mono/mono/io-layer/ChangeLog
===================================================================
--- trunk/mono/mono/io-layer/ChangeLog 2007-08-23 05:47:48 UTC (rev 84677)
+++ trunk/mono/mono/io-layer/ChangeLog 2007-08-23 06:13:25 UTC (rev 84678)
@@ -1,4 +1,8 @@
+2007-08-23 Robert Jordan <[EMAIL PROTECTED]>
+ * processes.[c|h]: Implement Get|SetPriorityClass ().
+ Code is contributed under MIT/X11 license.
+
Tue Aug 21 20:08:09 CEST 2007 Paolo Molaro <[EMAIL PROTECTED]>
* io.c: made convert_arg_to_utf8() and write_file() static.
Modified: trunk/mono/mono/io-layer/processes.c
===================================================================
--- trunk/mono/mono/io-layer/processes.c 2007-08-23 05:47:48 UTC (rev
84677)
+++ trunk/mono/mono/io-layer/processes.c 2007-08-23 06:13:25 UTC (rev
84678)
@@ -18,6 +18,8 @@
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
+#include <sys/time.h>
+#include <sys/resource.h>
#include <fcntl.h>
/* sys/resource.h (for rusage) is required when using osx 10.3 (but not 10.4)
*/
@@ -1716,3 +1718,118 @@
return (ret == 0);
}
+guint32
+GetPriorityClass (gpointer process)
+{
+#ifdef HAVE_GETPRIORITY
+ struct _WapiHandle_process *process_handle;
+ gboolean ok;
+ int ret;
+
+ ok = _wapi_lookup_handle (process, WAPI_HANDLE_PROCESS,
+ (gpointer *) &process_handle);
+
+ if (!ok) {
+ SetLastError (ERROR_INVALID_HANDLE);
+ return FALSE;
+ }
+
+ errno = 0;
+ ret = getpriority (PRIO_PROCESS, process_handle->id);
+ if (ret == -1 && errno != 0) {
+ switch (errno) {
+ case EPERM:
+ case EACCES:
+ SetLastError (ERROR_ACCESS_DENIED);
+ break;
+ case ESRCH:
+ SetLastError (ERROR_PROC_NOT_FOUND);
+ break;
+ default:
+ SetLastError (ERROR_GEN_FAILURE);
+ }
+ return FALSE;
+ }
+
+ if (ret == 0)
+ return NORMAL_PRIORITY_CLASS;
+ else if (ret < -15)
+ return REALTIME_PRIORITY_CLASS;
+ else if (ret < -10)
+ return HIGH_PRIORITY_CLASS;
+ else if (ret < 0)
+ return ABOVE_NORMAL_PRIORITY_CLASS;
+ else if (ret > 10)
+ return IDLE_PRIORITY_CLASS;
+ else if (ret > 0)
+ return BELOW_NORMAL_PRIORITY_CLASS;
+
+ return NORMAL_PRIORITY_CLASS;
+#else
+ SetLastError (ERROR_NOT_SUPPORTED);
+ return 0;
+#endif
+}
+
+gboolean
+SetPriorityClass (gpointer process, guint32 priority_class)
+{
+#ifdef HAVE_SETPRIORITY
+ struct _WapiHandle_process *process_handle;
+ gboolean ok;
+ int ret;
+ int prio;
+
+ ok = _wapi_lookup_handle (process, WAPI_HANDLE_PROCESS,
+ (gpointer *) &process_handle);
+
+ if (!ok) {
+ SetLastError (ERROR_INVALID_HANDLE);
+ return FALSE;
+ }
+
+ switch (priority_class) {
+ case IDLE_PRIORITY_CLASS:
+ prio = 19;
+ break;
+ case BELOW_NORMAL_PRIORITY_CLASS:
+ prio = 10;
+ break;
+ case NORMAL_PRIORITY_CLASS:
+ prio = 0;
+ break;
+ case ABOVE_NORMAL_PRIORITY_CLASS:
+ prio = -5;
+ break;
+ case HIGH_PRIORITY_CLASS:
+ prio = -11;
+ break;
+ case REALTIME_PRIORITY_CLASS:
+ prio = -20;
+ break;
+ default:
+ SetLastError (ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ ret = setpriority (PRIO_PROCESS, process_handle->id, prio);
+ if (ret == -1) {
+ switch (errno) {
+ case EPERM:
+ case EACCES:
+ SetLastError (ERROR_ACCESS_DENIED);
+ break;
+ case ESRCH:
+ SetLastError (ERROR_PROC_NOT_FOUND);
+ break;
+ default:
+ SetLastError (ERROR_GEN_FAILURE);
+ }
+ }
+
+ return ret == 0;
+#else
+ SetLastError (ERROR_NOT_SUPPORTED);
+ return FALSE;
+#endif
+}
Modified: trunk/mono/mono/io-layer/processes.h
===================================================================
--- trunk/mono/mono/io-layer/processes.h 2007-08-23 05:47:48 UTC (rev
84677)
+++ trunk/mono/mono/io-layer/processes.h 2007-08-23 06:13:25 UTC (rev
84678)
@@ -192,6 +192,10 @@
extern gboolean TerminateProcess (gpointer process, gint32 exitCode);
+extern guint32 GetPriorityClass (gpointer process);
+extern gboolean SetPriorityClass (gpointer process, guint32 priority_class);
+
+
G_END_DECLS
#endif /* _WAPI_PROCESSES_H_ */
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2007-08-23 05:47:48 UTC (rev 84677)
+++ trunk/mono/mono/metadata/ChangeLog 2007-08-23 06:13:25 UTC (rev 84678)
@@ -1,4 +1,8 @@
+2007-08-23 Robert Jordan <[EMAIL PROTECTED]>
+ * icall-def.h, process.*: implemented Get|SetPriorityClass icalls.
+ Code is contributed under MIT/X11 license.
+
Wed Aug 22 18:35:12 CEST 2007 Paolo Molaro <[EMAIL PROTECTED]>
* sgen-gc.h, sgen-gc.c: abstracted most of the OS-specific code.
Modified: trunk/mono/mono/metadata/icall-def.h
===================================================================
--- trunk/mono/mono/metadata/icall-def.h 2007-08-23 05:47:48 UTC (rev
84677)
+++ trunk/mono/mono/metadata/icall-def.h 2007-08-23 06:13:25 UTC (rev
84678)
@@ -166,12 +166,14 @@
ICALL(PROCESS_3, "ExitTime_internal(intptr)",
ves_icall_System_Diagnostics_Process_ExitTime_internal)
ICALL(PROCESS_4, "GetModules_internal()",
ves_icall_System_Diagnostics_Process_GetModules_internal)
ICALL(PROCESS_5, "GetPid_internal()",
ves_icall_System_Diagnostics_Process_GetPid_internal)
+ICALL(PROCESS_5B, "GetPriorityClass(intptr,int&)",
ves_icall_System_Diagnostics_Process_GetPriorityClass)
ICALL(PROCESS_6, "GetProcess_internal(int)",
ves_icall_System_Diagnostics_Process_GetProcess_internal)
ICALL(PROCESS_7, "GetProcesses_internal()",
ves_icall_System_Diagnostics_Process_GetProcesses_internal)
ICALL(PROCESS_8, "GetWorkingSet_internal(intptr,int&,int&)",
ves_icall_System_Diagnostics_Process_GetWorkingSet_internal)
ICALL(PROCESS_9, "Kill_internal",
ves_icall_System_Diagnostics_Process_Kill_internal)
ICALL(PROCESS_10, "ProcessName_internal(intptr)",
ves_icall_System_Diagnostics_Process_ProcessName_internal)
ICALL(PROCESS_11, "Process_free_internal(intptr)",
ves_icall_System_Diagnostics_Process_Process_free_internal)
+ICALL(PROCESS_11B, "SetPriorityClass(intptr,int,int&)",
ves_icall_System_Diagnostics_Process_SetPriorityClass)
ICALL(PROCESS_12, "SetWorkingSet_internal(intptr,int,int,bool)",
ves_icall_System_Diagnostics_Process_SetWorkingSet_internal)
ICALL(PROCESS_13,
"ShellExecuteEx_internal(System.Diagnostics.ProcessStartInfo,System.Diagnostics.Process/ProcInfo&)",
ves_icall_System_Diagnostics_Process_ShellExecuteEx_internal)
ICALL(PROCESS_14, "StartTime_internal(intptr)",
ves_icall_System_Diagnostics_Process_StartTime_internal)
Modified: trunk/mono/mono/metadata/process.c
===================================================================
--- trunk/mono/mono/metadata/process.c 2007-08-23 05:47:48 UTC (rev 84677)
+++ trunk/mono/mono/metadata/process.c 2007-08-23 06:13:25 UTC (rev 84678)
@@ -1107,3 +1107,18 @@
return 0;
}
+gint32
+ves_icall_System_Diagnostics_Process_GetPriorityClass (HANDLE process, gint32
*error)
+{
+ gint32 ret = GetPriorityClass (process);
+ *error = ret == 0 ? GetLastError () : 0;
+ return ret;
+}
+
+MonoBoolean
+ves_icall_System_Diagnostics_Process_SetPriorityClass (HANDLE process, gint32
priority_class, gint32 *error)
+{
+ gboolean ret = SetPriorityClass (process, priority_class);
+ *error = ret == 0 ? GetLastError () : 0;
+ return ret;
+}
Modified: trunk/mono/mono/metadata/process.h
===================================================================
--- trunk/mono/mono/metadata/process.h 2007-08-23 05:47:48 UTC (rev 84677)
+++ trunk/mono/mono/metadata/process.h 2007-08-23 06:13:25 UTC (rev 84678)
@@ -64,6 +64,8 @@
MonoBoolean ves_icall_System_Diagnostics_Process_SetWorkingSet_internal
(HANDLE process, guint32 min, guint32 max, MonoBoolean use_min) MONO_INTERNAL;
MonoBoolean ves_icall_System_Diagnostics_Process_Kill_internal (HANDLE
process, gint32 sig) MONO_INTERNAL;
gint64 ves_icall_System_Diagnostics_Process_Times (HANDLE process, gint32
type) MONO_INTERNAL;
+gint32 ves_icall_System_Diagnostics_Process_GetPriorityClass (HANDLE process,
gint32 *error) MONO_INTERNAL;
+MonoBoolean ves_icall_System_Diagnostics_Process_SetPriorityClass (HANDLE
process, gint32 priority_class, gint32 *error) MONO_INTERNAL;
G_END_DECLS
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches