diff --git a/src/source-pcap-file-directory-helper.c b/src/source-pcap-file-directory-helper.c index 78dbeacb9c..5a50462826 100644 --- a/src/source-pcap-file-directory-helper.c +++ b/src/source-pcap-file-directory-helper.c @@ -475,6 +475,18 @@ TmEcode PcapDirectoryDispatchForTimeRange(PcapFileDirectoryVars *pv, SCReturnInt(status); } +static TmEcode PcapDirectoryWaitPollInterval(PcapFileDirectoryVars *ptv) +{ + for (time_t waited = 0; waited < ptv->poll_interval; waited++) { + TmEcode status = PcapRunStatus(ptv); + if (status != TM_ECODE_OK) { + return status; + } + sleep(1); + } + return PcapRunStatus(ptv); +} + TmEcode PcapDirectoryDispatch(PcapFileDirectoryVars *ptv) { SCEnter(); @@ -484,15 +496,6 @@ TmEcode PcapDirectoryDispatch(PcapFileDirectoryVars *ptv) struct timespec older_than; memset(&older_than, 0, sizeof(struct timespec)); older_than.tv_sec = LONG_MAX; - uint32_t poll_seconds; -#ifndef OS_WIN32 - struct tm safe_tm; - memset(&safe_tm, 0, sizeof(safe_tm)); - poll_seconds = (uint32_t)localtime_r(&ptv->poll_interval, &safe_tm)->tm_sec; -#else - /* windows localtime is threadsafe */ - poll_seconds = (uint32_t)localtime(&ptv->poll_interval)->tm_sec; -#endif if (ptv->should_loop) { GetTime(&older_than); @@ -507,9 +510,7 @@ TmEcode PcapDirectoryDispatch(PcapFileDirectoryVars *ptv) (uintmax_t)SCTimespecAsEpochMillis(&older_than)); status = PcapDirectoryDispatchForTimeRange(ptv, &older_than); if (ptv->should_loop && status == TM_ECODE_OK) { - sleep(poll_seconds); - //update our status based on suricata control flags or unix command socket - status = PcapRunStatus(ptv); + status = PcapDirectoryWaitPollInterval(ptv); if (status == TM_ECODE_OK) { SCLogDebug("Checking if directory %s still exists", ptv->filename); //check directory