Skip to content

Commit 4e622e7

Browse files
pkarpjschmieg
pkarp
authored andcommitted
bug fix and optimization
1 parent 424c24e commit 4e622e7

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

src/pmem.c

+21-15
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ void pmemKVpairSet(void *key, void *val)
6666

6767
kv_PM_oid = sdsPMEMoidBackReference((sds)key);
6868
kv_PM_p = (struct key_val_pair_PM *)pmemobj_direct(*kv_PM_oid);
69-
TX_ADD_DIRECT(kv_PM_p);
7069

7170
val_oid.pool_uuid_lo = server.pool_uuid_lo;
7271
val_oid.off = (uint64_t)val - (uint64_t)server.pm_pool->addr;
7372

73+
TX_ADD_FIELD_DIRECT(kv_PM_p, val_oid);
7474
kv_PM_p->val_oid = val_oid;
7575
return;
7676
}
@@ -97,16 +97,17 @@ pmemAddToPmemList(void *key, void *val)
9797
kv_PM_p->val_oid = val_oid;
9898
typed_kv_PM.oid = kv_PM;
9999

100-
pmemobj_tx_add_range(server.pm_rootoid.oid, 0, sizeof(struct redis_pmem_root));
101100
root = pmemobj_direct(server.pm_rootoid.oid);
102101

103102
kv_PM_p->pmem_list_next = root->pe_first;
104103
if(!TOID_IS_NULL(root->pe_first)) {
105-
TX_ADD(D_RW(root->pe_first)->pmem_list_prev);
106-
D_RW(root->pe_first)->pmem_list_prev = typed_kv_PM;
104+
struct key_val_pair_PM *head = D_RW(root->pe_first);
105+
TX_ADD_FIELD_DIRECT(head,pmem_list_prev);
106+
head->pmem_list_prev = typed_kv_PM;
107107
}
108-
root->pe_first = typed_kv_PM;
109108

109+
TX_ADD_DIRECT(root);
110+
root->pe_first = typed_kv_PM;
110111
root->num_dict_entries++;
111112

112113
return kv_PM;
@@ -118,35 +119,40 @@ pmemRemoveFromPmemList(PMEMoid kv_PM_oid)
118119
TOID(struct key_val_pair_PM) typed_kv_PM;
119120
struct redis_pmem_root *root;
120121

121-
pmemobj_tx_add_range(server.pm_rootoid.oid, 0, sizeof(struct redis_pmem_root));
122122
root = pmemobj_direct(server.pm_rootoid.oid);
123123

124124
typed_kv_PM.oid = kv_PM_oid;
125125

126126
if(TOID_EQUALS(root->pe_first, typed_kv_PM)) {
127127
TOID(struct key_val_pair_PM) typed_kv_PM_next = D_RO(typed_kv_PM)->pmem_list_next;
128128
if(!TOID_IS_NULL(typed_kv_PM_next)){
129-
TX_ADD(typed_kv_PM_next);
130-
D_RW(typed_kv_PM_next)->pmem_list_prev.oid = OID_NULL;
129+
struct key_val_pair_PM *next = D_RW(typed_kv_PM_next);
130+
TX_ADD_FIELD_DIRECT(next,pmem_list_prev);
131+
next->pmem_list_prev.oid = OID_NULL;
131132
}
132133
TX_FREE(root->pe_first);
134+
TX_ADD_DIRECT(root);
133135
root->pe_first = typed_kv_PM_next;
136+
root->num_dict_entries--;
137+
return;
134138
}
135139
else {
136140
TOID(struct key_val_pair_PM) typed_kv_PM_prev = D_RO(typed_kv_PM)->pmem_list_prev;
137141
TOID(struct key_val_pair_PM) typed_kv_PM_next = D_RO(typed_kv_PM)->pmem_list_next;
138142
if(!TOID_IS_NULL(typed_kv_PM_prev)){
139-
TX_ADD(typed_kv_PM_prev);
140-
D_RW(typed_kv_PM_prev)->pmem_list_next = typed_kv_PM_next;
143+
struct key_val_pair_PM *prev = D_RW(typed_kv_PM_prev);
144+
TX_ADD_FIELD_DIRECT(prev,pmem_list_next);
145+
prev->pmem_list_next = typed_kv_PM_next;
141146
}
142147
if(!TOID_IS_NULL(typed_kv_PM_next)){
143-
TX_ADD(typed_kv_PM_next);
144-
D_RW(typed_kv_PM_next)->pmem_list_prev = typed_kv_PM_prev;
148+
struct key_val_pair_PM *next = D_RW(typed_kv_PM_next);
149+
TX_ADD_FIELD_DIRECT(next,pmem_list_prev);
150+
next->pmem_list_prev = typed_kv_PM_prev;
145151
}
146152
TX_FREE(typed_kv_PM);
153+
TX_ADD_FIELD_DIRECT(root,num_dict_entries);
154+
root->num_dict_entries--;
155+
return;
147156
}
148-
149-
root->num_dict_entries--;
150-
return;
151157
}
152158
#endif

0 commit comments

Comments
 (0)