/[lwip]/lwip/src/core/pbuf.c
ViewVC logotype

Diff of /lwip/src/core/pbuf.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.40.2.3 by likewise, Mon Apr 14 14:33:47 2003 UTC revision 1.40.2.4 by likewise, Wed May 14 14:38:28 2003 UTC
# Line 126  pbuf_pool_alloc(void) Line 126  pbuf_pool_alloc(void)
126    SYS_ARCH_DECL_PROTECT(old_level);    SYS_ARCH_DECL_PROTECT(old_level);
127    SYS_ARCH_PROTECT(old_level);    SYS_ARCH_PROTECT(old_level);
128    /* First, see if there are pbufs in the cache. */    /* First, see if there are pbufs in the cache. */
129    if(pbuf_pool_alloc_cache) {    if (pbuf_pool_alloc_cache) {
130      p = pbuf_pool_alloc_cache;      p = pbuf_pool_alloc_cache;
131      if(p) {      if (p) {
132        pbuf_pool_alloc_cache = p->next;        pbuf_pool_alloc_cache = p->next;
133      }      }
134    } else {    } else {
135  #if !SYS_LIGHTWEIGHT_PROT        #if !SYS_LIGHTWEIGHT_PROT      
136      /* 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
137         pretend to be out of buffers and return NULL. */         pretend to be out of buffers and return NULL. */
138      if(pbuf_pool_free_lock) {      if (pbuf_pool_free_lock) {
139  #ifdef PBUF_STATS  #ifdef PBUF_STATS
140        ++lwip_stats.pbuf.alloc_locked;        ++lwip_stats.pbuf.alloc_locked;
141  #endif /* PBUF_STATS */  #endif /* PBUF_STATS */
142        return NULL;        return NULL;
143      }      }
144      pbuf_pool_alloc_lock = 1;      pbuf_pool_alloc_lock = 1;
145      if(!pbuf_pool_free_lock) {      if (!pbuf_pool_free_lock) {
146  #endif /* SYS_LIGHTWEIGHT_PROT */          #endif /* SYS_LIGHTWEIGHT_PROT */        
147        p = pbuf_pool;        p = pbuf_pool;
148        if(p) {        if (p) {
149          pbuf_pool = p->next;          pbuf_pool = p->next;
150        }        }
151  #if !SYS_LIGHTWEIGHT_PROT        #if !SYS_LIGHTWEIGHT_PROT      
# Line 159  pbuf_pool_alloc(void) Line 159  pbuf_pool_alloc(void)
159    }    }
160        
161  #ifdef PBUF_STATS  #ifdef PBUF_STATS
162    if(p != NULL) {        if (p != NULL) {    
163      ++lwip_stats.pbuf.used;      ++lwip_stats.pbuf.used;
164      if(lwip_stats.pbuf.used > lwip_stats.pbuf.max) {      if (lwip_stats.pbuf.used > lwip_stats.pbuf.max) {
165        lwip_stats.pbuf.max = lwip_stats.pbuf.used;        lwip_stats.pbuf.max = lwip_stats.pbuf.used;
166      }      }
167    }    }
# Line 187  pbuf_pool_free(struct pbuf *p) Line 187  pbuf_pool_free(struct pbuf *p)
187      }      }
188  #endif /* PBUF_STATS */  #endif /* PBUF_STATS */
189    
190    if(pbuf_pool_alloc_cache == NULL) {    if (pbuf_pool_alloc_cache == NULL) {
191      pbuf_pool_alloc_cache = p;      pbuf_pool_alloc_cache = p;
192    } else {      } else {  
193      for(q = pbuf_pool_alloc_cache; q->next != NULL; q = q->next);      for(q = pbuf_pool_alloc_cache; q->next != NULL; q = q->next);
# Line 284  pbuf_alloc(pbuf_layer l, u16_t length, p Line 284  pbuf_alloc(pbuf_layer l, u16_t length, p
284      /* remaining length to be allocated */      /* remaining length to be allocated */
285      rem_len = length - p->len;      rem_len = length - p->len;
286      /* any remaining pbufs to be allocated? */      /* any remaining pbufs to be allocated? */
287      while(rem_len > 0) {            while (rem_len > 0) {      
288        q = pbuf_pool_alloc();        q = pbuf_pool_alloc();
289        if (q == NULL) {        if (q == NULL) {
290         DEBUGF(PBUF_DEBUG | 2, ("pbuf_alloc: Out of pbufs in pool.\n"));         DEBUGF(PBUF_DEBUG | 2, ("pbuf_alloc: Out of pbufs in pool.\n"));
# Line 370  pbuf_refresh(void) Line 370  pbuf_refresh(void)
370    sys_sem_wait(pbuf_pool_free_sem);    sys_sem_wait(pbuf_pool_free_sem);
371  #endif /* else SYS_LIGHTWEIGHT_PROT */  #endif /* else SYS_LIGHTWEIGHT_PROT */
372        
373    if(pbuf_pool_free_cache != NULL) {    if (pbuf_pool_free_cache != NULL) {
374  #if !SYS_LIGHTWEIGHT_PROT        #if !SYS_LIGHTWEIGHT_PROT      
375      pbuf_pool_free_lock = 1;      pbuf_pool_free_lock = 1;
376      if(!pbuf_pool_alloc_lock) {      if (!pbuf_pool_alloc_lock) {
377  #endif /* SYS_LIGHTWEIGHT_PROT */  #endif /* SYS_LIGHTWEIGHT_PROT */
378        if(pbuf_pool == NULL) {        if (pbuf_pool == NULL) {
379          pbuf_pool = pbuf_pool_free_cache;                pbuf_pool = pbuf_pool_free_cache;      
380        } else {          } else {  
381          for(p = pbuf_pool; p->next != NULL; p = p->next);          for(p = pbuf_pool; p->next != NULL; p = p->next);
# Line 416  pbuf_refresh(void) Line 416  pbuf_refresh(void)
416                                  SYS_ARCH_PROTECT(old_level);            \                                  SYS_ARCH_PROTECT(old_level);            \
417                                  PBUF_POOL_FAST_FREE(p);                 \                                  PBUF_POOL_FAST_FREE(p);                 \
418                                  SYS_ARCH_UNPROTECT(old_level);          \                                  SYS_ARCH_UNPROTECT(old_level);          \
419                                 } while(0)                                 } while (0)
420  #else /* SYS_LIGHTWEIGHT_PROT */  #else /* SYS_LIGHTWEIGHT_PROT */
421  #define PBUF_POOL_FREE(p)  do {                                         \  #define PBUF_POOL_FREE(p)  do {                                         \
422                               sys_sem_wait(pbuf_pool_free_sem);          \                               sys_sem_wait(pbuf_pool_free_sem);          \
423                               PBUF_POOL_FAST_FREE(p);                    \                               PBUF_POOL_FAST_FREE(p);                    \
424                               sys_sem_signal(pbuf_pool_free_sem);        \                               sys_sem_signal(pbuf_pool_free_sem);        \
425                             } while(0)                             } while (0)
426  #endif /* SYS_LIGHTWEIGHT_PROT */  #endif /* SYS_LIGHTWEIGHT_PROT */
427    
428  /**  /**

Legend:
Removed from v.1.40.2.3  
changed lines
  Added in v.1.40.2.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26