Revision 460fec67 slirp/mbuf.c

b/slirp/mbuf.c
17 17

  
18 18
#include <slirp.h>
19 19

  
20
static int mbuf_alloced;
21
struct mbuf m_freelist, m_usedlist;
22 20
#define MBUF_THRESH 30
23 21

  
24 22
/*
......
28 26
#define SLIRP_MSIZE (IF_MTU + IF_MAXLINKHDR + sizeof(struct m_hdr ) + 6)
29 27

  
30 28
void
31
m_init(void)
29
m_init(Slirp *slirp)
32 30
{
33
	m_freelist.m_next = m_freelist.m_prev = &m_freelist;
34
	m_usedlist.m_next = m_usedlist.m_prev = &m_usedlist;
31
    slirp->m_freelist.m_next = slirp->m_freelist.m_prev = &slirp->m_freelist;
32
    slirp->m_usedlist.m_next = slirp->m_usedlist.m_prev = &slirp->m_usedlist;
35 33
}
36 34

  
37 35
/*
......
43 41
 * which tells m_free to actually free() it
44 42
 */
45 43
struct mbuf *
46
m_get(void)
44
m_get(Slirp *slirp)
47 45
{
48 46
	register struct mbuf *m;
49 47
	int flags = 0;
50 48

  
51 49
	DEBUG_CALL("m_get");
52 50

  
53
	if (m_freelist.m_next == &m_freelist) {
51
	if (slirp->m_freelist.m_next == &slirp->m_freelist) {
54 52
		m = (struct mbuf *)malloc(SLIRP_MSIZE);
55 53
		if (m == NULL) goto end_error;
56
		mbuf_alloced++;
57
		if (mbuf_alloced > MBUF_THRESH)
54
		slirp->mbuf_alloced++;
55
		if (slirp->mbuf_alloced > MBUF_THRESH)
58 56
			flags = M_DOFREE;
57
		m->slirp = slirp;
59 58
	} else {
60
		m = m_freelist.m_next;
59
		m = slirp->m_freelist.m_next;
61 60
		remque(m);
62 61
	}
63 62

  
64 63
	/* Insert it in the used list */
65
	insque(m,&m_usedlist);
64
	insque(m,&slirp->m_usedlist);
66 65
	m->m_flags = (flags | M_USEDLIST);
67 66

  
68 67
	/* Initialise it */
......
97 96
	 */
98 97
	if (m->m_flags & M_DOFREE) {
99 98
		free(m);
100
		mbuf_alloced--;
99
		m->slirp->mbuf_alloced--;
101 100
	} else if ((m->m_flags & M_FREELIST) == 0) {
102
		insque(m,&m_freelist);
101
		insque(m,&m->slirp->m_freelist);
103 102
		m->m_flags = M_FREELIST; /* Clobber other flags */
104 103
	}
105 104
  } /* if(m) */
......
194 193
 * Fortunately, it's not used often
195 194
 */
196 195
struct mbuf *
197
dtom(void *dat)
196
dtom(Slirp *slirp, void *dat)
198 197
{
199 198
	struct mbuf *m;
200 199

  
......
202 201
	DEBUG_ARG("dat = %lx", (long )dat);
203 202

  
204 203
	/* bug corrected for M_EXT buffers */
205
	for (m = m_usedlist.m_next; m != &m_usedlist; m = m->m_next) {
204
	for (m = slirp->m_usedlist.m_next; m != &slirp->m_usedlist;
205
	     m = m->m_next) {
206 206
	  if (m->m_flags & M_EXT) {
207 207
	    if( (char *)dat>=m->m_ext && (char *)dat<(m->m_ext + m->m_size) )
208 208
	      return m;

Also available in: Unified diff