X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;ds=sidebyside;f=io.cpp;h=79848e94fc2a28bc17cdf2cdd2960f3469d42026;hb=2cd1c7c29ef4d2d3df3c5afd3ca6c788aede2bef;hp=2602dc275c1249818cafe11f00b5ff6af222be10;hpb=d69db812fe68fb913f65e6aa8ac8584ee079c0c6;p=nssm.git diff --git a/io.cpp b/io.cpp index 2602dc2..79848e9 100644 --- a/io.cpp +++ b/io.cpp @@ -242,7 +242,7 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) { /* Try online rotation only if a size threshold is set. */ logger_t *stdout_logger = 0; - if (service->rotate_files && service->rotate_stdout_online && size.QuadPart) { + if (service->rotate_files && service->rotate_stdout_online) { stdout_logger = (logger_t *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(logger_t)); if (stdout_logger) { /* Pipe between application's stdout and our logging handle. */ @@ -256,6 +256,7 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) { stdout_logger->write_handle = stdout_handle; stdout_logger->size = (__int64) size.QuadPart; stdout_logger->tid_ptr = &service->stdout_tid; + stdout_logger->rotate_online = &service->rotate_stdout_online; /* Logging thread. */ service->stdout_thread = create_logging_thread(stdout_logger); @@ -283,7 +284,7 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_DUPLICATEHANDLE_FAILED, NSSM_REG_STDOUT, error_string(GetLastError()), 0); return 4; } - service->rotate_stdout_online = false; + service->rotate_stdout_online = NSSM_ROTATE_OFFLINE; } set_flags = true; @@ -321,7 +322,7 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) { /* Try online rotation only if a size threshold is set. */ logger_t *stderr_logger = 0; - if (service->rotate_files && service->rotate_stderr_online && size.QuadPart) { + if (service->rotate_files && service->rotate_stderr_online) { stderr_logger = (logger_t *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(logger_t)); if (stderr_logger) { /* Pipe between application's stderr and our logging handle. */ @@ -335,6 +336,7 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) { stderr_logger->write_handle = stderr_handle; stderr_logger->size = (__int64) size.QuadPart; stderr_logger->tid_ptr = &service->stderr_tid; + stderr_logger->rotate_online = &service->rotate_stderr_online; /* Logging thread. */ service->stderr_thread = create_logging_thread(stderr_logger); @@ -362,7 +364,7 @@ int get_output_handles(nssm_service_t *service, HKEY key, STARTUPINFO *si) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_DUPLICATEHANDLE_FAILED, NSSM_REG_STDERR, error_string(GetLastError()), 0); return 7; } - service->rotate_stderr_online = false; + service->rotate_stderr_online = NSSM_ROTATE_OFFLINE; } } @@ -510,7 +512,7 @@ unsigned long WINAPI log_and_rotate(void *arg) { } else if (ret) continue; - if (size + (__int64) in >= logger->size) { + if (*logger->rotate_online == NSSM_ROTATE_ONLINE_ASAP || (logger->size && size + (__int64) in >= logger->size)) { /* Look for newline. */ unsigned long i; for (i = 0; i < in; i++) { @@ -527,6 +529,7 @@ unsigned long WINAPI log_and_rotate(void *arg) { size += (__int64) out; /* Rotate. */ + *logger->rotate_online = NSSM_ROTATE_ONLINE; TCHAR rotated[MAX_PATH]; rotated_filename(logger->path, rotated, _countof(rotated), 0);