/* proc1 writes some data, commits it, then exits */ void proc1() { rvm_t rvm; trans_t trans; char* segs[1]; rvm = rvm_init(__FILE__ ".d"); rvm_destroy(rvm, "testseg"); segs[0] = (char *) rvm_map(rvm, "testseg", 10000); trans = rvm_begin_trans(rvm, 1, (void **) segs); rvm_about_to_modify(trans, segs[0], 0, 100); sprintf(segs[0], "one"); rvm_commit_trans(trans); trans = rvm_begin_trans(rvm, 1, (void **) segs); rvm_about_to_modify(trans, segs[0], 0, 100); sprintf(segs[0], "two"); rvm_abort_trans(trans); trans = rvm_begin_trans(rvm, 1, (void **) segs); rvm_about_to_modify(trans, segs[0], 0, 100); sprintf(segs[0], "foo"); rvm_commit_trans(trans); abort(); }
/* proc1 writes some data, commits it, then exits */ void proc1() { rvm_t rvm; trans_t trans; char* segs[2]; rvm = rvm_init("rvm_segments"); segs[0] = (char *) rvm_map(rvm, "testseg", 10000); segs[1] = (char *) rvm_map(rvm, "anotherseg", 10000); trans = rvm_begin_trans(rvm, 2, (void **) segs); rvm_about_to_modify(trans, segs[0], 0, 100); sprintf(segs[0], "hello, world"); rvm_about_to_modify(trans, segs[0], 1000, 100); sprintf(segs[0]+1000, "hello, world"); rvm_about_to_modify(trans, segs[1], 0, 100); sprintf(segs[1], "hello, world"); rvm_about_to_modify(trans, segs[1], 1000, 100); sprintf(segs[1]+1000, "hello, world"); rvm_abort_trans(trans); abort(); }
int main(int argc, char **argv) { rvm_t rvm; char *seg; void *segs[1]; trans_t trans; rvm = rvm_init("rvm_segments"); rvm_destroy(rvm, "testseg"); seg = (char *) rvm_map(rvm, "testseg", 10000); segs[0] = seg; /* write some data and commit it */ trans = rvm_begin_trans(rvm, 1, segs); rvm_about_to_modify(trans, seg, 0, 100); sprintf(seg, TEST_STRING1); rvm_about_to_modify(trans, seg, OFFSET2, 100); sprintf(seg+OFFSET2, TEST_STRING1); rvm_commit_trans(trans); /* start writing some different data, but abort */ trans = rvm_begin_trans(rvm, 1, segs); rvm_about_to_modify(trans, seg, 0, 100); sprintf(seg, TEST_STRING2); rvm_about_to_modify(trans, seg, OFFSET2, 100); sprintf(seg+OFFSET2, TEST_STRING2); rvm_abort_trans(trans); /* test that the data was restored */ if(strcmp(seg+OFFSET2, TEST_STRING1)) { printf("ERROR: second hello is incorrect (%s)\n", seg+OFFSET2); exit(2); } if(strcmp(seg, TEST_STRING1)) { printf("ERROR: first hello is incorrect (%s)\n", seg); exit(2); } rvm_unmap(rvm, seg); printf("OK\n"); exit(0); }
/* proc1 writes some data, commits it, then exits */ void proc1() { rvm_t rvm; char *seg; char *segs[1]; trans_t trans; rvm = rvm_init("rvm_segments"); rvm_destroy(rvm, "testseg"); segs[0] = (char *) rvm_map(rvm, "testseg", 10000); seg = segs[0]; /* write some data and commit it */ trans = rvm_begin_trans(rvm, 1, (void**) segs); rvm_about_to_modify(trans, seg, 0, 100); sprintf(seg, TEST_STRING1); rvm_about_to_modify(trans, seg, OFFSET2, 100); sprintf(seg + OFFSET2, TEST_STRING2); rvm_about_to_modify(trans, seg, OFFSET3, 100); sprintf(seg + OFFSET3, TEST_STRING3); rvm_commit_trans(trans); /* start writing some different data, but abort */ trans = rvm_begin_trans(rvm, 1, (void**) segs); rvm_about_to_modify(trans, seg, 0, 100); sprintf(seg, TEST_STRING4); rvm_about_to_modify(trans, seg, OFFSET2, 100); sprintf(seg + OFFSET2, TEST_STRING5); rvm_about_to_modify(trans, seg, OFFSET3, 100); sprintf(seg + OFFSET3, TEST_STRING6); rvm_abort_trans(trans); abort(); }