This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Re: accept() FreeBSD hangs when out of resources


Andrew Lunn wrote:
On Mon, Jun 11, 2007 at 03:42:07PM -0800, Tad wrote:
accept() won't return and won't timeout (>12hrs) when listen() indicates a new connection, if out of sockets/file-descriptors and all TCP connections are in ESTABLISHED state.
Where exactly is it blocked. Please could you provide a call stack.

It's possible that the block is somewhere such as this "FIXME" code that wasn't finished in sys/kern/sockio.c


/*
348 * At this point we know that there is at least one connection
349 * ready to be accepted. Remove it from the queue prior to
350 * allocating the file descriptor for it since falloc() may
351 * block allowing another process to accept the connection
352 * instead.
353 */
354 so = TAILQ_FIRST(&head->so_comp);
355 TAILQ_REMOVE(&head->so_comp, so, so_list);
356 head->so_qlen--;
357
358 #if 0 // FIXME
359 fflag = lfp->f_flag;
360 error = falloc(p, &nfp, &fd);
361 if (error) {
362 /*
363 * Probably ran out of file descriptors. Put the
364 * unaccepted connection back onto the queue and
365 * do another wakeup so some other process might
366 * have a chance at it.
367 */
368 TAILQ_INSERT_HEAD(&head->so_comp, so, so_list);
369 head->so_qlen++;
370 wakeup_one(&head->so_timeo);
371 splx(s);
372 goto done;
373 }
374 fhold(nfp);
375 p->p_retval[0] = fd;
376
377 /* connection has been removed from the listen queue */
378 KNOTE(&head->so_rcv.sb_sel.si_note, 0);
379 #endif
380
381 so->so_state &= ~SS_COMP;
382 so->so_head = NULL;
383
384 cyg_selinit(&so->so_rcv.sb_sel);
385 cyg_selinit(&so->so_snd.sb_sel);
386 387 new_fp->f_type = DTYPE_SOCKET;


--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]