bool kernel_share_modes_taken;
- bool update_write_time_triggered;
- struct tevent_timer *update_write_time_event;
+
+ struct timeval update_write_time_at;
+ struct timed_event *update_write_time_event;
bool update_write_time_on_close;
struct timespec close_write_time;
bool write_time_forced;
fsp->update_write_time_on_close = true;
- if (fsp->update_write_time_triggered) {
+ if (!timeval_is_zero(fsp->update_write_time_at)) {
/*
* We only update the write time after 2 seconds
* on the first normal write. After that
*/
return;
}
- fsp->update_write_time_triggered = true;
-
delay = lp_parm_int(SNUM(fsp->conn),
"smbd", "writetimeupdatedelay",
WRITE_TIME_UPDATE_USEC_DELAY);
+ fsp->update_write_time_at = timeval_current_ofs_usec(delay),
DEBUG(5, ("Update write time %d usec later on %s\n",
delay, fsp_str_dbg(fsp)));
/* trigger the update 2 seconds later */
fsp->update_write_time_event =
tevent_add_timer(fsp->conn->sconn->ev_ctx, NULL,
- timeval_current_ofs_usec(delay),
+ fsp->update_write_time_at,
update_write_time_handler, fsp);
}
DEBUG(5, ("Update write time immediate on %s\n",
fsp_str_dbg(fsp)));
- /* After an immediate update, reset the trigger. */
- fsp->update_write_time_triggered = true;
- fsp->update_write_time_on_close = false;
-
ZERO_STRUCT(ft);
ft.mtime = timespec_current();
+ /* After an immediate update, reset the trigger. */
+ fsp->update_write_time_at = convert_timespec_to_timeval(ft.mtime);
+ fsp->update_write_time_on_close = false;
+
/* Update the time in the open file db. */
(void)set_write_time(fsp->file_id, ft.mtime);