Skip to content

Commit

Permalink
Bring io-layer up to date on this branch too.
Browse files Browse the repository at this point in the history
svn path=/branches/mono-1-1-8/mono/; revision=58462
  • Loading branch information
dickp committed Mar 24, 2006
1 parent 019aff8 commit f6de4c6
Show file tree
Hide file tree
Showing 36 changed files with 3,282 additions and 1,195 deletions.
32 changes: 32 additions & 0 deletions mono/handles/ChangeLog
@@ -1,3 +1,35 @@
2005-12-23 Dick Porter <dick@ximian.com>

* hps.c: Add named event support

2005-12-06 Dick Porter <dick@ximian.com>

* hps.c: Add named semaphore support

2005-11-11 Dick Porter <dick@ximian.com>

* hps.c: Thread handles are shared again

2005-10-26 Zoltan Varga <vargaz@gmail.com>

* hps.c (main): Applied patch from Robert Jordan (robertj@gmx.net). Fix
compilation with gcc 2.95.

2005-07-04 Dick Porter <dick@ximian.com>

* semdel.c: Fixed compilation on macos, put an error message back
at Hari's suggestion.

2005-07-01 Dick Porter <dick@ximian.com>

* semdel.c: Removed output, and always exit (0), to avoid giving
make trouble

2005-06-30 Dick Porter <dick@ximian.com>

* semdel.c: Added semdel, for deleting the current shared
semaphore

2005-04-13 Dick Porter <dick@ximian.com>

* hps.c: Update to new daemon-less code
Expand Down
10 changes: 9 additions & 1 deletion mono/handles/Makefile.am
@@ -1,5 +1,5 @@

noinst_PROGRAMS = hps
noinst_PROGRAMS = hps semdel

INCLUDES = \
-I$(top_srcdir) \
Expand All @@ -14,5 +14,13 @@ hps_LDADD = \
$(GMODULE_LIBS) \
-lm

semdel_LDADD = \
../io-layer/libwapi.la \
../utils/libmonoutils.la \
$(LIBGC_LIBS) \
$(GLIB_LIBS) \
$(GMODULE_LIBS) \
-lm

EXTRA_DIST = ChangeLog

73 changes: 44 additions & 29 deletions mono/handles/hps.c
Expand Up @@ -11,10 +11,10 @@

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
Expand All @@ -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 */
Expand All @@ -38,21 +34,24 @@ 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;

guint32 now;

_wapi_shared_layout = _wapi_shm_attach(WAPI_SHM_DATA);
if (_wapi_shared_layout == FALSE) {
if (_wapi_shared_layout == NULL) {
g_error ("Failed to attach shared memory!");
exit (-1);
}

_wapi_fileshare_layout = _wapi_shm_attach(WAPI_SHM_FILESHARE);
if (_wapi_fileshare_layout == FALSE) {
if (_wapi_fileshare_layout == NULL) {
g_error ("Failed to attach fileshare shared memory!");
exit (-1);
}
Expand All @@ -63,32 +62,21 @@ int main (int argc, char **argv)
_wapi_handle_collect ();
}

g_print ("collection: %d signals: %d sem: 0x%x\n",
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] %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],
now - meta->timestamp,
meta->signalled?"Sg":"Un",
now - shared->timestamp,
shared->signalled?"Sg":"Un",
details[shared->type](shared));
}
}
Expand Down Expand Up @@ -117,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];
Expand All @@ -130,7 +117,6 @@ static const guchar *thread_details (struct _WapiHandleShared *handle)

return(buf);
}
#endif

static const guchar *namedmutex_details (struct _WapiHandleShared *handle)
{
Expand All @@ -147,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];
Expand All @@ -155,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);
Expand Down
34 changes: 34 additions & 0 deletions mono/handles/semdel.c
@@ -0,0 +1,34 @@
#include <config.h>
#include <glib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

#include <mono/io-layer/io-layer.h>

/* We're digging into handle internals here... */
#include <mono/io-layer/handles-private.h>
#include <mono/io-layer/wapi-private.h>
#include <mono/io-layer/shared.h>

int main (int argc, char **argv)
{
int sem_id, ret;

_wapi_shared_layout = _wapi_shm_attach(WAPI_SHM_DATA);
if (_wapi_shared_layout == FALSE) {
exit (0);
}

sem_id = semget (_wapi_shared_layout->sem_key, _WAPI_SHARED_SEM_COUNT, 0600);
if (sem_id != -1) {
ret = semctl (sem_id, IPC_RMID, 0);
if (ret == -1) {
g_message ("Error deleting semaphore: %s",
g_strerror (errno));
}
}

exit (0);
}

0 comments on commit f6de4c6

Please sign in to comment.