Date: Thu, 10 Dec 1998 22:06:52 -0800 (PST) From: Archie Cobbs <archie@whistle.com> To: jkh@zippy.cdrom.com (Jordan K. Hubbard) Cc: eivind@yes.no, vallo@matti.ee, current@FreeBSD.ORG, dg@FreeBSD.ORG Subject: Re: mformat in free(): warning: junk pointer, too high to make sense. Message-ID: <199812110606.WAA22141@bubba.whistle.com> In-Reply-To: <2923.913355388@zippy.cdrom.com> from "Jordan K. Hubbard" at "Dec 10, 98 09:49:48 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
Jordan K. Hubbard writes:
> > > As for the inetd problem: We know what it is, we have a fix, and David
> > > Greenman seems to be vetoing committing it due to its "inelegance".
> >
> > So let's see his version.
>
> Why doesn't someone just commit it? David's already in hot water over
> his filesystem destroying fragmentation changes and I don't think
> anyone will side with him if you just bring the inetd change into
> -current at this point. :-) :-)
Well, this brings up an unrelated question. I've written a little
library that comes in very handy in situations like this (I have
heard there are similar things out there but this was a custom job).
Basically, it allows you to write an event driven program, where
each event is handled atomically from all others, without resorting
to threads and libc_r. An event is a file descriptor read/write
condition, a timer timeout, or a signal receipt.
The header file looks like this..
/* Types of events */
enum
{
EVENT_READ, /* value = file descriptor */
EVENT_WRITE, /* value = file descriptor */
EVENT_EXCEPTION, /* value = file descriptor */
EVENT_TIMEOUT, /* value = time in miliseconds */
EVENT_SIGNAL, /* value = signal number */
EVENT_USER, /* value = user defined */
};
typedef u_int EventRef;
typedef void (*EventHdlr)(int type, void *cookie);
/* Register a new event */
extern int EventRegister(EventRef *ref, int type, int value,
int prio, EventHdlr action, void *cookie);
/* Unregister a pending event */
extern int EventUnRegister(EventRef *ref);
/* Check if an event is pending */
extern int EventIsRegistered(EventRef ref);
/* Check time remaining on a timeout event */
extern int EventTimerRemain(EventRef ref);
/* Trigger a user defined event */
extern int EventUserEvent(int value);
/* Begin servicing events */
extern int EventStart(void);
/* Stop servicing events */
extern void EventStop(void);
Is this something possibly worth it's own little library? I'd be
willing to refine it and write a man page. Then maybe the inetd
problem could be solved more 'elegantly'.
-Archie
___________________________________________________________________________
Archie Cobbs * Whistle Communications, Inc. * http://www.whistle.com
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199812110606.WAA22141>
