}
rbuf->base = (void *)dapl_os_alloc(rsize * sizeof(void *));
+ dapl_os_memzero (rbuf->base, rsize * sizeof(void *));
if (rbuf->base != NULL) {
rbuf->lim = rsize - 1;
dapl_os_atomic_set(&rbuf->head, 0);
int pos;
int val;
- while (((dapl_os_atomic_read(&rbuf->head) + 1) & rbuf->lim) !=
- (dapl_os_atomic_read(&rbuf->tail) & rbuf->lim)) {
+ while ((dapl_os_atomic_read(&rbuf->head) + 1) !=
+ dapl_os_atomic_read(&rbuf->tail)) {
pos = dapl_os_atomic_read(&rbuf->head);
- val = dapl_os_atomic_assign(&rbuf->head, pos, pos + 1);
+ val = dapl_os_atomic_assign(&rbuf->head, pos, ((pos + 1) & rbuf->lim));
if (val == pos) {
pos = (pos + 1) & rbuf->lim; /* verify in range */
rbuf->base[pos] = entry;
}
return DAT_ERROR(DAT_INSUFFICIENT_RESOURCES, DAT_RESOURCE_MEMORY);
-
}
/*
while (dapl_os_atomic_read(&rbuf->head) !=
dapl_os_atomic_read(&rbuf->tail)) {
pos = dapl_os_atomic_read(&rbuf->tail);
- val = dapl_os_atomic_assign(&rbuf->tail, pos, pos + 1);
+ val = dapl_os_atomic_assign(&rbuf->tail, pos, ((pos + 1) & rbuf->lim));
if (val == pos) {
pos = (pos + 1) & rbuf->lim; /* verify in range */
-
return (rbuf->base[pos]);
}
}
return NULL;
-
}
/*