NET: Fix some errors in recent network I/O buffering when stack runs from interrupt level
This commit is contained in:
parent
2fb61ad15d
commit
3b81e58047
@ -156,7 +156,7 @@ int net_checksd(int fd, int oflags);
|
||||
* under sched/
|
||||
*/
|
||||
|
||||
void weak_function net_initialize(void);
|
||||
void net_initialize(void);
|
||||
void net_initlist(FAR struct socketlist *list);
|
||||
void net_releaselist(FAR struct socketlist *list);
|
||||
|
||||
|
@ -107,8 +107,7 @@ static FAR struct iob_s *iob_tryalloc(bool throttled)
|
||||
#if CONFIG_IOB_THROTTLE > 0
|
||||
/* If there are free I/O buffers for this allocation */
|
||||
|
||||
DEBUGVERIFY(sem_getvalue(sem, &semcount));
|
||||
if (semcount > 0)
|
||||
if (sem->semcount > 0)
|
||||
#endif
|
||||
{
|
||||
/* Take the I/O buffer from the head of the free list */
|
||||
@ -122,9 +121,18 @@ static FAR struct iob_s *iob_tryalloc(bool throttled)
|
||||
*/
|
||||
|
||||
g_iob_freelist = iob->io_flink;
|
||||
DEBUGVERIFY(sem_trywait(&g_iob_sem));
|
||||
|
||||
/* Take a semaphore count. Note that we cannot do this in
|
||||
* in the orthodox way by calling sem_wait() or sem_trywait()
|
||||
* because this function may be called from an interrupt
|
||||
* handler. Fortunately we know at at least one free buffer
|
||||
* so a simple decrement is all that is needed.
|
||||
*/
|
||||
|
||||
g_iob_sem.semcount--;
|
||||
DEBUGASSERT(g_iob_sem.semcount >= 0);
|
||||
|
||||
#if CONFIG_IOB_THROTTLE > 0
|
||||
//DEBUGVERIFY(sem_trywait(&g_throttle_sem));
|
||||
g_throttle_sem.semcount--;
|
||||
DEBUGASSERT(g_throttle_sem.semcount >= -CONFIG_IOB_THROTTLE);
|
||||
#endif
|
||||
|
@ -448,12 +448,7 @@ void os_start(void)
|
||||
/* Initialize the network system */
|
||||
|
||||
#ifdef CONFIG_NET
|
||||
#if 0
|
||||
if (net_initialize != NULL)
|
||||
#endif
|
||||
{
|
||||
net_initialize();
|
||||
}
|
||||
net_initialize();
|
||||
#endif
|
||||
|
||||
/* The processor specific details of running the operating system
|
||||
|
@ -116,8 +116,8 @@ int sem_trywait(FAR sem_t *sem)
|
||||
|
||||
saved_state = irqsave();
|
||||
|
||||
/* Any further errors could only be occurred because the semaphore
|
||||
* is not available.
|
||||
/* Any further errors could only occurr because the semaphore is not
|
||||
* available.
|
||||
*/
|
||||
|
||||
set_errno(EAGAIN);
|
||||
|
Loading…
Reference in New Issue
Block a user