#include <config.h>
#include <glib.h>
-#ifdef PLATFORM_WIN32
+#include "mini.h"
+
+#if defined(PLATFORM_WIN32) || !defined(HAVE_SYS_IPC_H) || !defined(HAVE_SYS_SEM_H)
int mini_wapi_hps (int argc, char **argv)
{
#include <mono/io-layer/shared.h>
#include <mono/io-layer/collection.h>
-static const guchar *unused_details (struct _WapiHandleShared *handle);
-static const guchar *unshared_details (struct _WapiHandleShared *handle);
-static const guchar *thread_details (struct _WapiHandleShared *handle);
-static const guchar *namedmutex_details (struct _WapiHandleShared *handle);
-static const guchar *namedsem_details (struct _WapiHandleShared *handle);
-static const guchar *namedevent_details (struct _WapiHandleShared *handle);
-static const guchar *process_details (struct _WapiHandleShared *handle);
+static const gchar *unused_details (struct _WapiHandleShared *handle);
+static const gchar *unshared_details (struct _WapiHandleShared *handle);
+#if 0
+static const gchar *thread_details (struct _WapiHandleShared *handle);
+#endif
+static const gchar *namedmutex_details (struct _WapiHandleShared *handle);
+static const gchar *namedsem_details (struct _WapiHandleShared *handle);
+static const gchar *namedevent_details (struct _WapiHandleShared *handle);
+static const gchar *process_details (struct _WapiHandleShared *handle);
/* This depends on the ordering of the enum WapiHandleType in
* io-layer/wapi-private.h
*/
-static const guchar * (*details[])(struct _WapiHandleShared *)=
+static const gchar * (*details[])(struct _WapiHandleShared *)=
{
unused_details,
unshared_details, /* file */
unshared_details, /* console */
- thread_details,
+ unshared_details, /* thread */
unshared_details, /* sem */
unshared_details, /* mutex */
unshared_details, /* event */
file_share = &_wapi_fileshare_layout->share_info[i];
if (file_share->handle_refs > 0) {
- g_print ("dev: 0x%llx ino: %lld open pid: %d share: 0x%x access: 0x%x refs: %d\n", file_share->device, file_share->inode, file_share->opened_by_pid, file_share->sharemode, file_share->access, file_share->handle_refs);
+ g_print ("dev: 0x%llx ino: %lld open pid: %d share: 0x%x access: 0x%x refs: %d\n", (long long int)file_share->device, (long long int)file_share->inode, file_share->opened_by_pid, file_share->sharemode, file_share->access, file_share->handle_refs);
}
}
exit (0);
}
-static const guchar *unused_details (struct _WapiHandleShared *handle)
+static const gchar *unused_details (struct _WapiHandleShared *handle)
{
return("unused details");
}
-static const guchar *unshared_details (struct _WapiHandleShared *handle)
+static const gchar *unshared_details (struct _WapiHandleShared *handle)
{
return("unshared details");
}
-static const guchar *thread_details (struct _WapiHandleShared *handle)
+#if 0
+static const gchar *thread_details (struct _WapiHandleShared *handle)
{
- static guchar buf[80];
+ static gchar buf[80];
struct _WapiHandle_thread *thr=&handle->u.thread;
g_snprintf (buf, sizeof(buf),
- "proc: %d, state: %d, exit: %u, join: %d",
- thr->owner_pid, thr->state, thr->exitstatus,
+ "proc: %d, tid: %ld, state: %d, exit: %u, join: %d",
+ thr->owner_pid, thr->id, thr->state, thr->exitstatus,
thr->joined);
return(buf);
}
+#endif
-static const guchar *namedmutex_details (struct _WapiHandleShared *handle)
+static const gchar *namedmutex_details (struct _WapiHandleShared *handle)
{
- static guchar buf[80];
+ static gchar buf[80];
gchar *name;
struct _WapiHandle_namedmutex *mut=&handle->u.namedmutex;
return(buf);
}
-static const guchar *namedsem_details (struct _WapiHandleShared *handle)
+static const gchar *namedsem_details (struct _WapiHandleShared *handle)
{
- static guchar buf[80];
+ static gchar buf[80];
gchar *name;
struct _WapiHandle_namedsem *sem = &handle->u.namedsem;
return(buf);
}
-static const guchar *namedevent_details (struct _WapiHandleShared *handle)
+static const gchar *namedevent_details (struct _WapiHandleShared *handle)
{
- static guchar buf[80];
+ static gchar buf[80];
gchar *name;
struct _WapiHandle_namedevent *event = &handle->u.namedevent;
return(buf);
}
-static const guchar *process_details (struct _WapiHandleShared *handle)
+static const gchar *process_details (struct _WapiHandleShared *handle)
{
- static guchar buf[80];
+ static gchar buf[80];
gchar *name;
struct _WapiHandle_process *proc=&handle->u.process;
exit (0);
}
-static void sem_explain (int val)
+static void sem_explain (int sem_id, ushort *vals, int which)
{
- g_print ("%d ", val);
- if (val >= 1) {
+ pid_t pid;
+
+ g_print ("%d ", vals[which]);
+ if (vals[which] >= 1) {
g_print ("(Unlocked)");
} else {
- g_print ("(Locked)");
+ pid = semctl (sem_id, which, GETPID);
+
+ g_print ("(Locked by %d)", pid);
}
g_print ("\n");
}
ret = semctl (sem_id, 0, GETALL, arg);
if (ret != -1) {
g_print ("Namespace: ");
- sem_explain (vals[_WAPI_SHARED_SEM_NAMESPACE]);
+ sem_explain (sem_id, vals, _WAPI_SHARED_SEM_NAMESPACE);
g_print ("Fileshare: ");
- sem_explain (vals[_WAPI_SHARED_SEM_FILESHARE]);
+ sem_explain (sem_id, vals, _WAPI_SHARED_SEM_FILESHARE);
g_print ("Handles: ");
- sem_explain (vals[_WAPI_SHARED_SEM_SHARED_HANDLES]);
+ sem_explain (sem_id, vals,
+ _WAPI_SHARED_SEM_SHARED_HANDLES);
g_print ("Count lock: ");
- sem_explain (vals[_WAPI_SHARED_SEM_PROCESS_COUNT_LOCK]);
- g_print ("Count: %d\n", vals[_WAPI_SHARED_SEM_PROCESS_COUNT] - 1);
+ sem_explain (sem_id, vals,
+ _WAPI_SHARED_SEM_PROCESS_COUNT_LOCK);
+ g_print ("Count: %d\n",
+ vals[_WAPI_SHARED_SEM_PROCESS_COUNT]);
}
}