osaf/services/infrastructure/dtms/transport/tests/Makefile.am |
3 +-
osaf/services/infrastructure/dtms/transport/tests/transport_monitor_test.cc |
4 +-
osaf/services/infrastructure/dtms/transport/transport_monitor.cc |
41 +++++----
3 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/osaf/services/infrastructure/dtms/transport/tests/Makefile.am
b/osaf/services/infrastructure/dtms/transport/tests/Makefile.am
--- a/osaf/services/infrastructure/dtms/transport/tests/Makefile.am
+++ b/osaf/services/infrastructure/dtms/transport/tests/Makefile.am
@@ -42,4 +42,5 @@ transport_test_SOURCES = \
transport_test_LDADD = \
$(GTEST_DIR)/lib/libgtest.la \
- $(GTEST_DIR)/lib/libgtest_main.la
+ $(GTEST_DIR)/lib/libgtest_main.la \
+ $(top_builddir)/osaf/libs/core/libopensaf_core.la
diff --git
a/osaf/services/infrastructure/dtms/transport/tests/transport_monitor_test.cc
b/osaf/services/infrastructure/dtms/transport/tests/transport_monitor_test.cc
---
a/osaf/services/infrastructure/dtms/transport/tests/transport_monitor_test.cc
+++
b/osaf/services/infrastructure/dtms/transport/tests/transport_monitor_test.cc
@@ -82,14 +82,14 @@ class TransportMonitorTest : public ::te
TEST_F(TransportMonitorTest, WaitForNonexistentDaemonName) {
pid_t pid = monitor_->WaitForDaemon("name_does_not_exist", 17);
EXPECT_EQ(pid, pid_t{-1});
- EXPECT_EQ(mock_osaf_poll.invocations, 17);
+ EXPECT_EQ(mock_osaf_poll.invocations, 1);
}
TEST_F(TransportMonitorTest, WaitForNonexistentDaemonPid) {
CreatePidFile("pid_does_not_exist", 1234567890, false);
pid_t pid = monitor_->WaitForDaemon("pid_does_not_exist", 1);
EXPECT_EQ(pid, pid_t{-1});
- EXPECT_EQ(mock_osaf_poll.invocations, 1);
+ EXPECT_EQ(mock_osaf_poll.invocations, 0);
}
TEST_F(TransportMonitorTest, WaitForExistingPid) {
diff --git a/osaf/services/infrastructure/dtms/transport/transport_monitor.cc
b/osaf/services/infrastructure/dtms/transport/transport_monitor.cc
--- a/osaf/services/infrastructure/dtms/transport/transport_monitor.cc
+++ b/osaf/services/infrastructure/dtms/transport/transport_monitor.cc
@@ -25,15 +25,16 @@
#include "./configmake.h"
#include "osaf/libs/core/common/include/osaf_poll.h"
#include "osaf/libs/core/cplusplus/base/getenv.h"
+#include "osaf/libs/core/cplusplus/base/file_notify.h"
TransportMonitor::TransportMonitor(int term_fd)
: term_fd_{term_fd},
- pkgpiddir_{base::GetEnv<std::string>("pkgpiddir", PKGPIDDIR)},
- proc_path_{"/proc/"},
- mds_log_file_{base::GetEnv<std::string>("pkglogdir", PKGLOGDIR)
- + "/mds.log"},
- old_mds_log_file_{mds_log_file_ + ".old"},
- use_tipc_{base::GetEnv<std::string>("MDS_TRANSPORT", "TCP") == "TIPC"} {
+pkgpiddir_{base::GetEnv<std::string>("pkgpiddir", PKGPIDDIR)},
+proc_path_{"/proc/"},
+mds_log_file_{base::GetEnv<std::string>("pkglogdir", PKGLOGDIR)
+ + "/mds.log"},
+old_mds_log_file_{mds_log_file_ + ".old"},
+use_tipc_{base::GetEnv<std::string>("MDS_TRANSPORT", "TCP") == "TIPC"} {
}
TransportMonitor::~TransportMonitor() {
@@ -43,15 +44,17 @@ pid_t TransportMonitor::WaitForDaemon(co
int64_t seconds_to_wait) {
std::string pidfile = pkgpiddir_ + "/" + daemon_name + ".pid";
pid_t pid = pid_t{-1};
- for (int64_t count = 0; count != seconds_to_wait; ++count) {
- if (!(std::ifstream{pidfile} >> pid).fail()
- && IsDir(proc_path_ + std::to_string(pid)))
- break;
- pid = pid_t{-1};
- if (Sleep(1))
- return pid_t{-1};
+ base::FileNotify file_notify;
+ int rc = file_notify.WaitForFileCreation(pidfile, seconds_to_wait * 1000);
+
+ if (rc == base::FileNotify::kOK) {
+ if (!(std::ifstream{pidfile} >> pid).fail()) {
+ if (IsDir(proc_path_ + std::to_string(pid))) {
+ return pid;
+ }
+ }
}
- return pid;
+ return pid_t{-1};
}
bool TransportMonitor::Sleep(int64_t seconds_to_wait) {
@@ -65,6 +68,7 @@ bool TransportMonitor::IsDir(const std::
}
void TransportMonitor::RotateMdsLogs(pid_t pid_to_watch) {
+ base::FileNotify file_notify;
std::string pid_path{proc_path_ + std::to_string(pid_to_watch)};
for (;;) {
if (FileSize(mds_log_file_) > kMaxFileSize) {
@@ -72,10 +76,11 @@ void TransportMonitor::RotateMdsLogs(pid
rename(mds_log_file(), old_mds_log_file());
}
if (pid_to_watch != pid_t{0}) {
- for (int64_t i = 0; i != kLogRotationIntervalInSeconds; ++i) {
- if (!IsDir(pid_path) || Sleep(1))
- return;
- }
+ int rc =
+ file_notify.WaitForFileDeletion(pid_path,
+ kLogRotationIntervalInSeconds *
1000);
+ if (rc == base::FileNotify::kOK)
+ return;
} else {
if (Sleep(kLogRotationIntervalInSeconds))
return;
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel