Remove fetched item in the recycle list
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22994 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
8b4ee93be6
commit
15bf869553
@ -22,7 +22,6 @@ struct snet_buffer {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
snet_buffer*
|
snet_buffer*
|
||||||
snb_create(uint16 size)
|
snb_create(uint16 size)
|
||||||
{
|
{
|
||||||
@ -63,14 +62,12 @@ snb_pull(snet_buffer* snb, uint16 size)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
snb_reset(snet_buffer* snb)
|
snb_reset(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
snb->puttingSize = snb->pullingSize = 0;
|
snb->puttingSize = snb->pullingSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
snb_free(snet_buffer* snb)
|
snb_free(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
@ -86,7 +83,6 @@ snb_free(snet_buffer* snb)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void*
|
inline void*
|
||||||
snb_get(snet_buffer* snb)
|
snb_get(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
@ -94,7 +90,6 @@ snb_get(snet_buffer* snb)
|
|||||||
return snb->buffer;
|
return snb->buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline uint16
|
inline uint16
|
||||||
snb_size(snet_buffer* snb)
|
snb_size(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
@ -102,7 +97,6 @@ snb_size(snet_buffer* snb)
|
|||||||
return snb->expectedSize;
|
return snb->expectedSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void*
|
inline void*
|
||||||
snb_cookie(snet_buffer* snb)
|
snb_cookie(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
@ -110,7 +104,6 @@ snb_cookie(snet_buffer* snb)
|
|||||||
return snb->cookie;
|
return snb->cookie;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
snb_set_cookie(snet_buffer* snb, void* cookie)
|
snb_set_cookie(snet_buffer* snb, void* cookie)
|
||||||
{
|
{
|
||||||
@ -118,21 +111,18 @@ snb_set_cookie(snet_buffer* snb, void* cookie)
|
|||||||
snb->cookie = cookie;
|
snb->cookie = cookie;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return true if we canot "put" more data in the buffer */
|
/* Return true if we canot "put" more data in the buffer */
|
||||||
inline bool snb_completed(snet_buffer* snb)
|
inline bool snb_completed(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
return (snb != NULL && (snb->expectedSize == snb->puttingSize));
|
return (snb != NULL && (snb->expectedSize == snb->puttingSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return true if we cannot pull more more data from the buffer */
|
/* Return true if we cannot pull more more data from the buffer */
|
||||||
inline bool snb_finished(snet_buffer* snb)
|
inline bool snb_finished(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
return (snb != NULL && (snb->expectedSize == snb->pullingSize));
|
return (snb != NULL && (snb->expectedSize == snb->pullingSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool snb_remaining_to_put(snet_buffer* snb)
|
inline bool snb_remaining_to_put(snet_buffer* snb)
|
||||||
{
|
{
|
||||||
return (snb != NULL && (snb->expectedSize - snb->puttingSize));
|
return (snb != NULL && (snb->expectedSize - snb->puttingSize));
|
||||||
@ -144,14 +134,13 @@ inline bool snb_remaining_to_pull(snet_buffer* snb)
|
|||||||
return (snb != NULL && (snb->expectedSize - snb->pullingSize));
|
return (snb != NULL && (snb->expectedSize - snb->pullingSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ISSUE1: Number of packets in the worst case(we always need a bigger
|
/* ISSUE1: Number of packets in the worst case(we always need a bigger
|
||||||
buffer than before) increases, never decreases:
|
buffer than before) increases, never decreases:
|
||||||
|
|
||||||
SOL1: Delete the smallest when the queue is bigger than X elements
|
SOL1: Delete the smallest when the queue is bigger than X elements
|
||||||
SOL2: ?
|
SOL2: ?
|
||||||
|
|
||||||
ISSUE2: If the queue is not gonna be used for long time, Memory c
|
ISSUE2: If the queue is not gonna be used for long time. Memory c
|
||||||
ould be freed
|
ould be freed
|
||||||
|
|
||||||
SOL1: Provide purge func.
|
SOL1: Provide purge func.
|
||||||
@ -177,7 +166,6 @@ snb_attempt_reuse(snet_buffer* snb, uint16 size)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
snb_park(struct list* l, snet_buffer* snb)
|
snb_park(struct list* l, snet_buffer* snb)
|
||||||
{
|
{
|
||||||
@ -189,7 +177,6 @@ snb_park(struct list* l, snet_buffer* snb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
snet_buffer*
|
snet_buffer*
|
||||||
snb_fetch(struct list* l, uint16 size)
|
snb_fetch(struct list* l, uint16 size)
|
||||||
{
|
{
|
||||||
@ -211,5 +198,13 @@ snb_fetch(struct list* l, uint16 size)
|
|||||||
previous = item;
|
previous = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
return snb_attempt_reuse(item, size);
|
// reusing previous pointer for another proposit
|
||||||
|
previous = snb_attempt_reuse(item, size);
|
||||||
|
|
||||||
|
/* the resulting reused one is the same as we fetched? => remove it from list*/
|
||||||
|
if (item == previous) {
|
||||||
|
list_remove_item(l, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return previous;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user