req->state |= XS_SERVED;
if (verbose)
log_io("complete", io);
- xseg_respond(store->xseg, req->portno, req);
+ while (xseg_respond(store->xseg, req->portno, req) == Noneidx)
+ ;
xseg_signal(store->xseg, req->portno);
__sync_fetch_and_sub(&store->fdcache[io->fdcacheidx].ref, 1);
}
req->state |= XS_FAILED;
if (verbose)
log_io("fail", io);
- xseg_respond(store->xseg, req->portno, req);
+ while (xseg_respond(store->xseg, req->portno, req) == Noneidx)
+ ;
xseg_signal(store->xseg, req->portno);
if (io->fdcacheidx >= 0) {
__sync_fetch_and_sub(&store->fdcache[io->fdcacheidx].ref, 1);
max = 128;
data[max-1] = 0;
fprintf(stderr, "request %llu state %u\n", (unsigned long long)req->serial, req->state);
- fprintf(stderr, "data: %s\n", data);
}
int cmd_info(char *target)
uint64_t offset;
xserial srl;
char *req_data, *req_target;
+ seed = random();
for (;;) {
xseg_prepare_wait(xseg, srcport);
req_data = xseg_get_data(xseg, submitted);
reported = 0;
- seed = random();
mkname(namebuf, targetlen, seed);
namebuf[targetlen] = 0;
//printf("%ld: %s\n", nr_submitted, namebuf);
if (srl == Noneidx) {
xseg_put_request(xseg, submitted->portno, submitted);
} else {
+ seed = random();
nr_submitted += 1;
xseg_signal(xseg, dstport);
}
xserial srl;
char *req_data, *req_target;
+ seed = random();
for (;;) {
submitted = NULL;
xseg_prepare_wait(xseg, srcport);
req_target = xseg_get_target(xseg, submitted);
reported = 0;
- seed = random();
mkname(namebuf, targetlen, seed);
namebuf[targetlen] = 0;
//printf("%ld: %s\n", nr_submitted, namebuf);
submitted->offset = offset;
submitted->size = chunksize;
submitted->op = X_READ;
-
srl = xseg_submit(xseg, dstport, submitted);
if (srl == Noneidx) {
xseg_put_request(xseg, submitted->portno, submitted);
} else {
+ seed = random();
nr_submitted += 1;
xseg_signal(xseg, dstport);
}
report_request(received);
} else if (!chkchunk(req_data, received->datalen,
req_target, received->targetlen, received->offset)) {
+ // report_request(received);
nr_mismatch += 1;
}
if (cmd_join())
return -1;
- //fprintf(stderr, "global free requests: %u\n", xq_count(xseg->free_requests));
+
+ fprintf(stderr, "Heap usage: %llu / %llu\n", xseg->heap->cur, xseg->config.heap_size);
for (t = 0; t < xseg->config.nr_ports; t++)
cmd_report(t);
struct xheap *heap = XPTR_TAKE(obj_h->heap, container);
struct xobject *obj = NULL;
+ unsigned long i = 0;
+
uint64_t used, bytes = nr * obj_h->obj_size;
xptr objptr;
xhash_t *allocated = XPTR_TAKE(obj_h->allocated, container);
obj->size = obj_h->obj_size;
obj->next = XPTR_MAKE(((unsigned long) mem) + used, container); //point to the next obj
// printf("foo: %lx\n", &obj->next);
+
+ i++;
retry:
r = xhash_insert(allocated, objptr, objptr); //keep track of allocated objects
goto retry;
}
}
+ XSEGLOG("allocated %lu elements\n", i);
if (!obj)
return -1;
objptr = obj_h->list;