134 |
#if !SYS_LIGHTWEIGHT_PROT |
#if !SYS_LIGHTWEIGHT_PROT |
135 |
/* Next, check the actual pbuf pool, but if the pool is locked, we |
/* Next, check the actual pbuf pool, but if the pool is locked, we |
136 |
pretend to be out of buffers and return NULL. */ |
pretend to be out of buffers and return NULL. */ |
137 |
if(pbuf_pool_free_lock) { |
if (pbuf_pool_free_lock) { |
138 |
#ifdef PBUF_STATS |
#ifdef PBUF_STATS |
139 |
++lwip_stats.pbuf.alloc_locked; |
++lwip_stats.pbuf.alloc_locked; |
140 |
#endif /* PBUF_STATS */ |
#endif /* PBUF_STATS */ |
141 |
return NULL; |
return NULL; |
142 |
} |
} |
143 |
pbuf_pool_alloc_lock = 1; |
pbuf_pool_alloc_lock = 1; |
144 |
if(!pbuf_pool_free_lock) { |
if (!pbuf_pool_free_lock) { |
145 |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
146 |
p = pbuf_pool; |
p = pbuf_pool; |
147 |
if(p) { |
if (p) { |
148 |
pbuf_pool = p->next; |
pbuf_pool = p->next; |
149 |
} |
} |
150 |
#if !SYS_LIGHTWEIGHT_PROT |
#if !SYS_LIGHTWEIGHT_PROT |
157 |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
158 |
|
|
159 |
#ifdef PBUF_STATS |
#ifdef PBUF_STATS |
160 |
if(p != NULL) { |
if (p != NULL) { |
161 |
++lwip_stats.pbuf.used; |
++lwip_stats.pbuf.used; |
162 |
if(lwip_stats.pbuf.used > lwip_stats.pbuf.max) { |
if (lwip_stats.pbuf.used > lwip_stats.pbuf.max) { |
163 |
lwip_stats.pbuf.max = lwip_stats.pbuf.used; |
lwip_stats.pbuf.max = lwip_stats.pbuf.used; |
164 |
} |
} |
165 |
} |
} |
258 |
/* remaining length to be allocated */ |
/* remaining length to be allocated */ |
259 |
rem_len = length - p->len; |
rem_len = length - p->len; |
260 |
/* any remaining pbufs to be allocated? */ |
/* any remaining pbufs to be allocated? */ |
261 |
while(rem_len > 0) { |
while (rem_len > 0) { |
262 |
q = pbuf_pool_alloc(); |
q = pbuf_pool_alloc(); |
263 |
if (q == NULL) { |
if (q == NULL) { |
264 |
DEBUGF(PBUF_DEBUG | 2, ("pbuf_alloc: Out of pbufs in pool.\n")); |
DEBUGF(PBUF_DEBUG | 2, ("pbuf_alloc: Out of pbufs in pool.\n")); |
346 |
SYS_ARCH_PROTECT(old_level); \ |
SYS_ARCH_PROTECT(old_level); \ |
347 |
PBUF_POOL_FAST_FREE(p); \ |
PBUF_POOL_FAST_FREE(p); \ |
348 |
SYS_ARCH_UNPROTECT(old_level); \ |
SYS_ARCH_UNPROTECT(old_level); \ |
349 |
} while(0) |
} while (0) |
350 |
#else /* SYS_LIGHTWEIGHT_PROT */ |
#else /* SYS_LIGHTWEIGHT_PROT */ |
351 |
#define PBUF_POOL_FREE(p) do { \ |
#define PBUF_POOL_FREE(p) do { \ |
352 |
sys_sem_wait(pbuf_pool_free_sem); \ |
sys_sem_wait(pbuf_pool_free_sem); \ |
353 |
PBUF_POOL_FAST_FREE(p); \ |
PBUF_POOL_FAST_FREE(p); \ |
354 |
sys_sem_signal(pbuf_pool_free_sem); \ |
sys_sem_signal(pbuf_pool_free_sem); \ |
355 |
} while(0) |
} while (0) |
356 |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
357 |
|
|
358 |
/** |
/** |
632 |
LWIP_ASSERT("h != NULL", h != NULL); |
LWIP_ASSERT("h != NULL", h != NULL); |
633 |
LWIP_ASSERT("t != NULL", t != NULL); |
LWIP_ASSERT("t != NULL", t != NULL); |
634 |
|
|
635 |
if(t == NULL) |
if (t == NULL) |
636 |
return; |
return; |
637 |
|
|
638 |
/* proceed to last pbuf of chain */ |
/* proceed to last pbuf of chain */ |