[io-layer] Print from which pipe we just read
[mono.git] / mono / io-layer / process-private.h
index c3e6988732dfec4fbfac0580d705dd8f9b254bfd..ddd6e863f36623426672ab8244c2fdf9f7ae216b 100644 (file)
 #include <config.h>
 #include <glib.h>
 
+#include <mono/utils/mono-os-semaphore.h>
+
 /* There doesn't seem to be a defined symbol for this */
 #define _WAPI_PROCESS_CURRENT (gpointer)0xFFFFFFFF
 
+/*
+ * Handles > _WAPI_PROCESS_UNHANDLED are pseudo handles which represent processes
+ * not started by the runtime.
+ */
 /* This marks a system process that we don't have a handle on */
 /* FIXME: Cope with PIDs > sizeof guint */
 #define _WAPI_PROCESS_UNHANDLED (1 << (8*sizeof(pid_t)-1))
 #define _WAPI_PROCESS_UNHANDLED_PID_MASK (-1 & ~_WAPI_PROCESS_UNHANDLED)
+#define WAPI_IS_PSEUDO_PROCESS_HANDLE(handle) ((GPOINTER_TO_UINT(handle) & _WAPI_PROCESS_UNHANDLED) == _WAPI_PROCESS_UNHANDLED)
+#define WAPI_PID_TO_HANDLE(pid) GINT_TO_POINTER (_WAPI_PROCESS_UNHANDLED + (pid))
+#define WAPI_HANDLE_TO_PID(handle) (GPOINTER_TO_UINT ((handle)) - _WAPI_PROCESS_UNHANDLED)
 
+void wapi_processes_init (void);
 extern gpointer _wapi_process_duplicate (void);
 extern void wapi_processes_cleanup (void);
 
 extern struct _WapiHandleOps _wapi_process_ops;
 
-#define _WAPI_PROC_NAME_MAX_LEN _POSIX_PATH_MAX
-
 /*
  * MonoProcess describes processes we create.
  * It contains a semaphore that can be waited on in order to wait
@@ -42,18 +50,17 @@ struct MonoProcess {
        gint32 handle_count; /* the number of handles to this mono_process instance */
        /* we keep a ref to the creating _WapiHandle_process handle until
         * the process has exited, so that the information there isn't lost.
-        * If we put the information there in this structure, it won't be
-        * available to other processes when using shared handles. */
+        */
        gpointer handle;
+       gboolean freeable;
        struct MonoProcess *next;
 };
 
+typedef struct MonoProcess MonoProcess;
 
 /*
  * _WapiHandle_process is a structure containing all the required information
  * for process handling.
- * The mono_process field is only present if this process has created
- * the corresponding process.
  */
 struct _WapiHandle_process
 {
@@ -62,12 +69,13 @@ struct _WapiHandle_process
        gpointer main_thread;
        WapiFileTime create_time;
        WapiFileTime exit_time;
-       gchar proc_name[_WAPI_PROC_NAME_MAX_LEN];
+       char *proc_name;
        size_t min_working_set;
        size_t max_working_set;
        gboolean exited;
-       pid_t self; /* mono_process is shared among processes, but only usable in the process that created it */
        struct MonoProcess *mono_process;
 };
 
+typedef struct _WapiHandle_process WapiHandle_process;
+
 #endif /* _WAPI_PROCESS_PRIVATE_H_ */