In gmcs:
[mono.git] / mono / handles / hps.c
index 2eb4d6bde58bd462ffc174c257b20beae5ccade3..506a8812a74c1942696e92eff1e6905f58c5a11f 100644 (file)
 
 static const guchar *unused_details (struct _WapiHandleShared *handle);
 static const guchar *unshared_details (struct _WapiHandleShared *handle);
-#if 0
 static const guchar *thread_details (struct _WapiHandleShared *handle);
-#endif
 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);
 
 /* This depends on the ordering of the enum WapiHandleType in
@@ -25,11 +25,7 @@ static const guchar * (*details[])(struct _WapiHandleShared *)=
        unused_details,
        unshared_details,               /* file */
        unshared_details,               /* console */
-#if 0
        thread_details,
-#else
-       unshared_details,               /* thread */
-#endif
        unshared_details,               /* sem */
        unshared_details,               /* mutex */
        unshared_details,               /* event */
@@ -38,65 +34,54 @@ static const guchar * (*details[])(struct _WapiHandleShared *)=
        process_details,
        unshared_details,               /* pipe */
        namedmutex_details,
+       namedsem_details,
+       namedevent_details,
        unused_details,
 };
 
 int main (int argc, char **argv)
 {
        guint32 i;
-       
-       _wapi_shared_layout = _wapi_shm_attach();
-       if (_wapi_shared_layout == FALSE) {
+       guint32 now;
+
+       _wapi_shared_layout = _wapi_shm_attach(WAPI_SHM_DATA);
+       if (_wapi_shared_layout == NULL) {
                g_error ("Failed to attach shared memory!");
                exit (-1);
        }
 
-       _wapi_fileshare_layout = _wapi_fileshare_shm_attach();
-       if (_wapi_fileshare_layout == FALSE) {
+       _wapi_fileshare_layout = _wapi_shm_attach(WAPI_SHM_FILESHARE);
+       if (_wapi_fileshare_layout == NULL) {
                g_error ("Failed to attach fileshare shared memory!");
                exit (-1);
        }
        
        if (argc > 1) {
+               _wapi_shm_semaphores_init ();
                _wapi_collection_init ();
                _wapi_handle_collect ();
        }
        
-       g_print ("master: %d namespace: %d collection: %d signals: %d\n",
-                _wapi_shared_layout->master_timestamp,
-                _wapi_shared_layout->namespace_check,
+       g_print ("collection: %d sem: 0x%x\n",
                 _wapi_shared_layout->collection_count,
-                _wapi_shared_layout->signal_count);
+                _wapi_shared_layout->sem_key);
        
+       now = (guint32)(time(NULL) & 0xFFFFFFFF);
        for (i = 0; i < _WAPI_HANDLE_INITIAL_COUNT; i++) {
                struct _WapiHandleShared *shared;
-               struct _WapiHandleSharedMetadata *meta;
-               guint32 now = (guint32)(time(NULL) & 0xFFFFFFFF);
-               
-               meta = &_wapi_shared_layout->metadata[i];
                
                shared = &_wapi_shared_layout->handles[i];
-               if (shared->stale == TRUE) {
-                       g_print ("    (%3x) [%7s]  *STALE*  (%s)\n", i,
-                                _wapi_handle_typename[shared->type],
-                                details[shared->type](shared));
-               }
-               
-               shared = &_wapi_shared_layout->handles[meta->offset];
                if (shared->type != WAPI_HANDLE_UNUSED) {
-                       g_print ("%3x (%3x) [%7s] %c %4u %s (%s)\n",
-                                i, meta->offset,
+                       g_print ("%3x (%3d) [%7s] %4u %s (%s)\n",
+                                i, shared->handle_refs,
                                 _wapi_handle_typename[shared->type],
-                                meta->checking == 0?' ':'X',
-                                now - meta->timestamp,
-                                meta->signalled?"Sg":"Un",
+                                now - shared->timestamp,
+                                shared->signalled?"Sg":"Un",
                                 details[shared->type](shared));
                }
        }
 
-       g_print ("Fileshare check: %d hwm: %d\n",
-                _wapi_fileshare_layout->share_check,
-                _wapi_fileshare_layout->hwm);
+       g_print ("Fileshare hwm: %d\n", _wapi_fileshare_layout->hwm);
        
        for (i = 0; i <= _wapi_fileshare_layout->hwm; i++) {
                struct _WapiFileShare *file_share;
@@ -120,7 +105,6 @@ static const guchar *unshared_details (struct _WapiHandleShared *handle)
        return("unshared details");
 }
 
-#if 0
 static const guchar *thread_details (struct _WapiHandleShared *handle)
 {
        static guchar buf[80];
@@ -133,7 +117,6 @@ static const guchar *thread_details (struct _WapiHandleShared *handle)
        
        return(buf);
 }
-#endif
 
 static const guchar *namedmutex_details (struct _WapiHandleShared *handle)
 {
@@ -150,6 +133,35 @@ static const guchar *namedmutex_details (struct _WapiHandleShared *handle)
        return(buf);
 }
 
+static const guchar *namedsem_details (struct _WapiHandleShared *handle)
+{
+       static guchar buf[80];
+       gchar *name;
+       struct _WapiHandle_namedsem *sem = &handle->u.namedsem;
+       
+       name = sem->sharedns.name;
+       
+       g_snprintf (buf, sizeof(buf), "[%15s] val: %5u, max: %5d",
+                   name == NULL?(gchar *)"":name, sem->val, sem->max);
+
+       return(buf);
+}
+
+static const guchar *namedevent_details (struct _WapiHandleShared *handle)
+{
+       static guchar buf[80];
+       gchar *name;
+       struct _WapiHandle_namedevent *event = &handle->u.namedevent;
+       
+       name = event->sharedns.name;
+       
+       g_snprintf (buf, sizeof(buf), "[%15s] %s count: %5u",
+                   name == NULL?(gchar *)"":name,
+                   event->manual?"Manual":"Auto", event->set_count);
+
+       return(buf);
+}
+
 static const guchar *process_details (struct _WapiHandleShared *handle)
 {
        static guchar buf[80];
@@ -158,7 +170,7 @@ static const guchar *process_details (struct _WapiHandleShared *handle)
        
        name = proc->proc_name;
        
-       g_snprintf (buf, sizeof(buf), "[%15s] pid: %5u exit: %u",
+       g_snprintf (buf, sizeof(buf), "[%25.25s] pid: %5u exit: %u",
                    name==NULL?(gchar *)"":name, proc->id, proc->exitstatus);
        
        return(buf);