From d1a4f8e55edd7eaab0ae8f59894764af862056f0 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Thu, 20 May 2010 11:48:08 -0700 Subject: [PATCH] (SIGAR-217) fix EventLog change detection for the Security log case --- .../org/hyperic/sigar/win32/EventLogThread.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/win32/EventLogThread.java b/bindings/java/src/org/hyperic/sigar/win32/EventLogThread.java index 6b8b9b37..1c7f24fc 100644 --- a/bindings/java/src/org/hyperic/sigar/win32/EventLogThread.java +++ b/bindings/java/src/org/hyperic/sigar/win32/EventLogThread.java @@ -157,13 +157,26 @@ public class EventLogThread implements Runnable { // XXX: Using the waitForChange() method would be a // cleaner way to go, but we cannot interrupt // a native system call. + boolean logChanged = false; int lastEvent = log.getNewestRecord(); if (lastEvent < curEvent) { + logChanged = true; + } + else if ((lastEvent == curEvent) && (lastEvent != -1)) { + //example: clearing the Security log generates an event + //and clear it again before any new events come in + try { + log.read(lastEvent); + } catch (Win32Exception e) { + logChanged = true; + } + } + + if (logChanged) { logger.debug(this.logName + " EventLog has changed, re-opening"); try { log.close(); } catch (Win32Exception e) {} log.open(this.logName); - curEvent = log.getOldestRecord(); - lastEvent = log.getNewestRecord(); + curEvent = 0; //all events in the log are new to us after being cleared } if (lastEvent > curEvent) {