253
44 struct record_t {
45
char name[63];
46
char valid;
47 };
48 struct root {
49
pobj::persistent_ptr header;
50
pobj::persistent_ptr records;
51 };
52
53 pobj::pool pop;
54
55 int main(int argc, char *argv[]) {
56
57
pop = pobj::pool::open("/mnt/pmem/file",
58
"RECORDS");
59
auto proot = pop.root();
60
pobj::persistent_ptr header
61
= proot->header;
62
pobj::persistent_ptr records
63
= proot->records;
64
65
for (uint8_t i = 0; i < header->counter; i++) {
66
if (records[i].valid == 2) {
67
printf("found valid record\n");
68
printf(" name = %s\n",
69
records[i].name);
70
}
71
}
72
73
pop.close();
74
return 0;
75 }
Listing 12-38 (writer) uses the VALGRIND_PMC_EMIT_LOG macro to emit a pmreorder
message when we get to lines 66 and 87. This will make sense later when we introduce
out-of-order analysis using pmemcheck.
Chapter 12 Debugging persistent MeMory appliCations
Précédent

- 277/457

Suivant