it really should have been printing all this time. Also fix my rather
bogus handling of the id_conflicts value by moving it to the end of
isa_device and dealing with that correctly now.
to access it. setdelayed() actually ORs the bits in `idelayed' into
`ipending' and clears `idelayed'.
Call setdelayed() every (normal) clock tick to convert delayed
interrupts into pending ones.
Drivers can set bits in `idelayed' at any time to schedule an interrupt
at the next clock tick. This is more efficient than calling timeout().
Currently only software interrupts can be scheduled.
boot diskless with it, you get a panic because setconf() is only
called for mountroot == ffs_mountroot. It really needs to be called
no matter what manner of rootfs we have. I can't really say if
swapgeneric will work with a CD-ROM though. (I get the feeling I'm
the only one who uses swapgeneric these days anyway.)
others. The flag can be put in descriptive locations, e.g.:
device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr
or
device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr
But is nonetheless boolean only. You can't turn conflict checking off for
only a given type of conflict. I didn't deem it worth the trouble at this
stage, and it's far better than the ALLOW_CONFLICT_* that preceeded it.
currently considering reducing the TCP fasttimo to 100ms to help improve
things, but this would be done as a seperate step at some point in the
future.
This was done because it was causing some sometimes serious performance
problems with T/TCP.
there may even be LKMs.) Also, change the internal name of `unixdomain'
to `localdomain' since AF_LOCAL is now the preferred name of this family.
Declare netisr correctly and in the right place.
- Make the child process reaper signal-driven. (Previously, we called reaper()
once a second each time we went through the select() loop. This was
convenient, but inefficient.)
- Increase main select() timeout from 1 second to 60 seconds and use
this as the ping timer instead of using timestamps in the _dom_binding
structure. This nd the reaper() change noted above makes ypbind a little
less CPU-intensive.
- Don't flag EINTR's from select() as errors since they will happen as a
result of incoming SIGCHLD's interrupting select().
- Prevent possible resource hogging. Currently we malloc() memory
each time a user process asks us to establish a binding for a domain,
but we never free it. This could lead to serious memory leakage if a
'clever' user did something like ask ypwhich to check the bindings
for domains 0.0.0.0.0.0.0.0.0.0 through 9.9.9.9.9.9.9.9.9.9 inclusive.
(This would also make a mess out of the /var/yp/binding directory.)
We now avoid this silliness by a) limiting the maximum number of
simultaneous bindings we can manage to 200, and b) free()ing _dom_binding
structures of secondary domains whose servers have stopped responding.
We unlink the /var/yp/binding/domain.vers files for the free()ed
domains too.
(This is safe to do since a client can prod us into reestablishing the
binding, at which time we'll simply allocate a new _dom_binding structure
for it.)
We keep count of the total number of domains. If asked to
allocate more than the maximum, we return an error. I have yet to hear
of anybody needing 200 simultaneous NIS bindings, so this should be
enough. (I chose the number 200 arbitrarily. It can be increased if need
be.)
- Changed "server not responding"/"server OK" messages to display server
IP addresses again since it looks spiffier.
- Use daemon() to daemonify ourselves,
- Added a SIGTERM handler that removes all binding files and unregisters
the ypbind service from the portmapper when a SIGTERM in received.
- The comment 'blow away everything in BINDINGDIR' has no associated code.
Give it some: clean out /var/yp/binding at startup (if it exists).
This completes my ypbind wishlist. Barring bug fixes, I shouldn't need to
go poking around in here anymore. (Of course, this means I can start
working on my ypserv whishlist now... :)