Poll() uses the array smallbits that is big enough to hold 32 struct

pollfd's to avoid calling malloc() on small numbers of fd's.  Because
smalltype's members have type char, its address might be misaligned
for a struct pollfd.  Change the array of char to an array of struct
pollfd.

PR:		kern/58214
Submitted by:	Stefan Farfeleder <stefan@fafoe.narf.at>
Reviewed by:	bde (a long time ago)
MFC after:	3 days
This commit is contained in:
andre 2004-08-27 21:23:50 +00:00
parent b070bc78b9
commit 30fc557b45

View File

@ -848,8 +848,8 @@ poll(td, uap)
struct thread *td;
struct poll_args *uap;
{
caddr_t bits;
char smallbits[32 * sizeof(struct pollfd)];
struct pollfd *bits;
struct pollfd smallbits[32];
struct timeval atv, rtv, ttv;
int error = 0, timo;
u_int ncoll, nfds;
@ -908,7 +908,7 @@ poll(td, uap)
mtx_unlock_spin(&sched_lock);
mtx_unlock(&sellock);
error = pollscan(td, (struct pollfd *)bits, nfds);
error = pollscan(td, bits, nfds);
mtx_lock(&sellock);
if (error || td->td_retval[0])
goto done;