xq: Respect size when allocating and initializing
authorFilippos Giannakos <philipgian@grnet.gr>
Tue, 6 Aug 2013 10:02:11 +0000 (13:02 +0300)
committerFilippos Giannakos <philipgian@grnet.gr>
Tue, 6 Aug 2013 10:02:11 +0000 (13:02 +0300)
When allocating and initializing a new xq, respect the xq size limit that the
initialization sets, and do not initialize past that.

xseg/xtypes/xq.c

index 261ad17..f8648a2 100644 (file)
@@ -63,10 +63,12 @@ void xq_init_map(struct xq *xq,
                 void *mem)
 {
        xqindex t, *qmem = mem;
+       xq->size = __snap(size);
+       if (count > xq->size)
+               count = xq->size;
        xq->head = count + 1;
        xq->tail = 0;
        XPTRSET(&xq->queue, qmem);
-       xq->size = __snap(size);
        for (t = 0; t < count; t++)
                qmem[t] = mapfn(t);
        xlock_release(&xq->lock);
@@ -75,10 +77,12 @@ void xq_init_map(struct xq *xq,
 void xq_init_seq(struct xq *xq, xqindex size, xqindex count, void *mem)
 {
        xqindex t, *qmem = mem;
+       xq->size = __snap(size);
+       if (count > xq->size)
+               count = xq->size;
        xq->head = count + 1;
        xq->tail = 0;
        XPTRSET(&xq->queue, qmem);
-       xq->size = __snap(size);
        for (t = 0; t < count; t++)
                qmem[t] = t;
        xlock_release(&xq->lock);