diff --git a/mcs/class/System/System.Diagnostics/Process.cs b/mcs/class/System/System.Diagnostics/Process.cs index 75787d07bc22d..b9478e11e6896 100644 --- a/mcs/class/System/System.Diagnostics/Process.cs +++ b/mcs/class/System/System.Diagnostics/Process.cs @@ -856,11 +856,10 @@ public static Process GetProcessById(int processId) public static Process[] GetProcesses() { int [] pids = GetProcesses_internal (); - ArrayList proclist = new ArrayList (); - if (pids == null) return new Process [0]; - + + ArrayList proclist = new ArrayList (pids.Length); for (int i = 0; i < pids.Length; i++) { try { proclist.Add (GetProcessById (pids [i])); @@ -893,7 +892,7 @@ public static Process[] GetProcessesByName(string processName) if (pids == null) return new Process [0]; - ArrayList proclist = new ArrayList (); + ArrayList proclist = new ArrayList (pids.Length); for (int i = 0; i < pids.Length; i++) { try { Process p = GetProcessById (pids [i]); diff --git a/mono/metadata/process.c b/mono/metadata/process.c index 01a29bcd74a83..5dc231eb8bc57 100644 --- a/mono/metadata/process.c +++ b/mono/metadata/process.c @@ -891,25 +891,38 @@ MonoArray *ves_icall_System_Diagnostics_Process_GetProcesses_internal (void) MonoArray *procs; gboolean ret; DWORD needed; - guint32 count, i; - DWORD pids[1024]; + guint32 count; + guint32 *pids; MONO_ARCH_SAVE_REGS; - ret=EnumProcesses (pids, sizeof(pids), &needed); - if(ret==FALSE) { - /* FIXME: throw an exception */ - return(NULL); - } - - count=needed/sizeof(DWORD); - procs=mono_array_new (mono_domain_get (), mono_get_int32_class (), - count); - for(i=0; i