X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fio-layer%2Fprocess-private.h;h=ddd6e863f36623426672ab8244c2fdf9f7ae216b;hb=6a796dc348e91fa0f742953c96a9466df2a4e241;hp=c3e6988732dfec4fbfac0580d705dd8f9b254bfd;hpb=e01250c2c778280a85fe632548b06987f077d415;p=mono.git diff --git a/mono/io-layer/process-private.h b/mono/io-layer/process-private.h index c3e6988732d..ddd6e863f36 100644 --- a/mono/io-layer/process-private.h +++ b/mono/io-layer/process-private.h @@ -13,21 +13,29 @@ #include #include +#include + /* 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_ */