struct share_mode_data *d = lck->data;
uint32_t i;
- for (i=0; i<d->num_share_modes; i++) {
+ i = 0;
+ while (i<d->num_share_modes) {
struct share_mode_entry *e = &d->share_modes[i];
struct server_id pid = e->pid;
uint64_t share_file_id = e->share_file_id;
if (stop) {
return true;
}
+
+ if (e->stale) {
+ *e = d->share_modes[d->num_share_modes-1];
+ d->num_share_modes -= 1;
+ } else {
+ i += 1;
+ }
}
return true;
return NULL;
}
-static void remove_stale_share_mode_entries(struct share_mode_data *d)
-{
- uint32_t i;
-
- i = 0;
- while (i < d->num_share_modes) {
- if (d->share_modes[i].stale) {
- struct share_mode_entry *m = d->share_modes;
- m[i] = m[d->num_share_modes-1];
- d->num_share_modes -= 1;
- continue;
- }
- i += 1;
- }
-
- if (d->num_share_modes == 0) {
- TALLOC_FREE(d->delete_tokens);
- d->num_delete_tokens = 0;
- }
-}
-
/*******************************************************************
If modified, store the share_mode_data back into the database.
********************************************************************/
}
d->sequence_number += 1;
- remove_stale_share_mode_entries(d);
if (d->num_share_modes == 0) {
+ TALLOC_FREE(d->delete_tokens);
+ d->num_delete_tokens = 0;
+
if (d->fresh) {
DBG_DEBUG("Ignoring fresh empty record\n");
return NT_STATUS_OK;