comparison src/os/win32/ngx_process_cycle.c @ 2738:ae81441e23f4

implement "-s signal" option for Unix
author Igor Sysoev <igor@sysoev.ru>
date Tue, 21 Apr 2009 20:25:49 +0000
parents d43d73277c5c
children 78342383cb6e
comparison
equal deleted inserted replaced
2737:d52cf82d0d77 2738:ae81441e23f4
1004 WaitForSingleObject(ngx_stop_event, INFINITE); 1004 WaitForSingleObject(ngx_stop_event, INFINITE);
1005 } 1005 }
1006 1006
1007 1007
1008 ngx_int_t 1008 ngx_int_t
1009 ngx_signal_process(ngx_cycle_t *cycle, char *sig) 1009 ngx_os_signal_process(ngx_cycle_t *cycle, char *sig, ngx_int_t pid)
1010 { 1010 {
1011 size_t n; 1011 HANDLE ev;
1012 HANDLE ev; 1012 ngx_int_t rc;
1013 ngx_int_t rc, pid; 1013 char evn[NGX_PROCESS_SYNC_NAME];
1014 ngx_file_t file;
1015 ngx_core_conf_t *ccf;
1016 u_char buf[NGX_INT64_LEN + 2];
1017 char evn[NGX_PROCESS_SYNC_NAME];
1018
1019 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "signal process started");
1020
1021 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
1022
1023 file.name = ccf->pid;
1024 file.log = cycle->log;
1025
1026 file.fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY,
1027 NGX_FILE_OPEN, NGX_FILE_DEFAULT_ACCESS);
1028
1029 if (file.fd == NGX_INVALID_FILE) {
1030 ngx_log_error(NGX_LOG_ERR, cycle->log, ngx_errno,
1031 ngx_open_file_n " \"%s\" failed", file.name.data);
1032 return 1;
1033 }
1034
1035 rc = 1;
1036
1037 n = ngx_read_file(&file, buf, NGX_INT64_LEN + 2, 0);
1038
1039 if (n == NGX_ERROR) {
1040 goto failed;
1041 }
1042
1043 while (n-- && (buf[n] == CR || buf[n] == LF)) { /* void */ }
1044
1045 pid = ngx_atoi(buf, ++n);
1046
1047 if (pid == NGX_ERROR) {
1048 ngx_log_error(NGX_LOG_ERR, cycle->log, 0,
1049 "invalid PID number \"%*s\" in \"%s\"",
1050 n, buf, file.name.data);
1051 goto failed;
1052 }
1053 1014
1054 ngx_sprintf((u_char *) evn, "ngx_%s_%ul%Z", sig, pid); 1015 ngx_sprintf((u_char *) evn, "ngx_%s_%ul%Z", sig, pid);
1055 1016
1056 ev = OpenEvent(EVENT_MODIFY_STATE, 0, evn); 1017 ev = OpenEvent(EVENT_MODIFY_STATE, 0, evn);
1057 if (ev == NULL) { 1018 if (ev == NULL) {
1058 ngx_log_error(NGX_LOG_ERR, cycle->log, ngx_errno, 1019 ngx_log_error(NGX_LOG_ERR, cycle->log, ngx_errno,
1059 "OpenEvent(\"%s\") failed", evn); 1020 "OpenEvent(\"%s\") failed", evn);
1060 goto failed; 1021 return 1;
1061 } 1022 }
1062 1023
1063 if (SetEvent(ev) == 0) { 1024 if (SetEvent(ev) == 0) {
1064 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, 1025 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
1065 "SetEvent(\"%s\") failed", evn); 1026 "SetEvent(\"%s\") failed", evn);
1027 rc = 1;
1028
1066 } else { 1029 } else {
1067 rc = 0; 1030 rc = 0;
1068 } 1031 }
1069 1032
1070 ngx_close_handle(ev); 1033 ngx_close_handle(ev);
1071
1072 failed:
1073
1074 if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
1075 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
1076 ngx_close_file_n " \"%s\" failed", file.name.data);
1077 }
1078 1034
1079 return rc; 1035 return rc;
1080 } 1036 }
1081 1037
1082 1038