Commit fbd73284 authored by Sidnei da Silva's avatar Sidnei da Silva

      - Collector #1939: When running as a service, Zope could
        potentially collect too much log output filling the NT Event
        Log. When that happened, a 'print' during exception handling
        would cause an IOError because the service had no 'redirection
        pipe' anymore (because it's shutting down) to write to,
        causing the service to not restart automatically.
parent 059996b9
......@@ -26,6 +26,13 @@ Zope Changes
Bugs Fixed
- Collector #1939: When running as a service, Zope could
potentially collect too much log output filling the NT Event
Log. When that happened, a 'print' during exception handling
would cause an IOError because the service had no 'redirection
pipe' anymore (because it's shutting down) to write to,
causing the service to not restart automatically.
- Collector #1976: FTP STOR command would load the file being
uploaded in memory. Changed to use a TemporaryFile.
......
......@@ -36,8 +36,10 @@ BACKOFF_INITIAL_INTERVAL = 5
# (except obviously via the event log entry)
# Size of the blocks we read from the child process's output.
CHILDCAPTURE_BLOCK_SIZE = 80
# The number of BLOCKSIZE blocks we keep as process output.
CHILDCAPTURE_MAX_BLOCKS = 200
# The number of BLOCKSIZE blocks we keep as process output. This gives
# is 4k, which should be enough to see any tracebacks etc, but not so
# large as to prematurely fill the event log.
CHILDCAPTURE_MAX_BLOCKS = 50
class Service(win32serviceutil.ServiceFramework):
"""Base class for a Windows Server to manage an external process.
......@@ -108,7 +110,10 @@ class Service(win32serviceutil.ServiceFramework):
except win32api.error, details:
# Failed to write a log entry - most likely problem is
# that the event log is full. We don't want this to kill us
print "FAILED to write INFO event", event, ":", details
try:
print "FAILED to write INFO event", event, ":", details
except IOError:
pass
def _dolog(self, func, msg):
try:
......@@ -118,8 +123,13 @@ class Service(win32serviceutil.ServiceFramework):
except win32api.error, details:
# Failed to write a log entry - most likely problem is
# that the event log is full. We don't want this to kill us
print "FAILED to write event log entry:", details
print msg
try:
print "FAILED to write event log entry:", details
print msg
except IOError:
# And if running as a service, its likely our sys.stdout
# is invalid
pass
def info(self, s):
self._dolog(servicemanager.LogInfoMsg, s)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment