ae376893 by astaxie

fix #1176 grace support windows

1 parent 40974365
...@@ -133,19 +133,13 @@ func NewServer(addr string, handler http.Handler) (srv *graceServer) { ...@@ -133,19 +133,13 @@ func NewServer(addr string, handler http.Handler) (srv *graceServer) {
133 SignalHooks: map[int]map[os.Signal][]func(){ 133 SignalHooks: map[int]map[os.Signal][]func(){
134 PRE_SIGNAL: map[os.Signal][]func(){ 134 PRE_SIGNAL: map[os.Signal][]func(){
135 syscall.SIGHUP: []func(){}, 135 syscall.SIGHUP: []func(){},
136 syscall.SIGUSR1: []func(){},
137 syscall.SIGUSR2: []func(){},
138 syscall.SIGINT: []func(){}, 136 syscall.SIGINT: []func(){},
139 syscall.SIGTERM: []func(){}, 137 syscall.SIGTERM: []func(){},
140 syscall.SIGTSTP: []func(){},
141 }, 138 },
142 POST_SIGNAL: map[os.Signal][]func(){ 139 POST_SIGNAL: map[os.Signal][]func(){
143 syscall.SIGHUP: []func(){}, 140 syscall.SIGHUP: []func(){},
144 syscall.SIGUSR1: []func(){},
145 syscall.SIGUSR2: []func(){},
146 syscall.SIGINT: []func(){}, 141 syscall.SIGINT: []func(){},
147 syscall.SIGTERM: []func(){}, 142 syscall.SIGTERM: []func(){},
148 syscall.SIGTSTP: []func(){},
149 }, 143 },
150 }, 144 },
151 state: STATE_INIT, 145 state: STATE_INIT,
...@@ -208,16 +202,24 @@ func (srv *graceServer) ListenAndServe() (err error) { ...@@ -208,16 +202,24 @@ func (srv *graceServer) ListenAndServe() (err error) {
208 l, err := srv.getListener(addr) 202 l, err := srv.getListener(addr)
209 if err != nil { 203 if err != nil {
210 log.Println(err) 204 log.Println(err)
211 return 205 return err
212 } 206 }
213 207
214 srv.GraceListener = newGraceListener(l, srv) 208 srv.GraceListener = newGraceListener(l, srv)
215 209
216 if srv.isChild { 210 if srv.isChild {
217 syscall.Kill(syscall.Getppid(), syscall.SIGTERM) 211 process, err := os.FindProcess(os.Getppid())
212 if err != nil {
213 log.Println(err)
214 return err
215 }
216 err = process.Kill()
217 if err != nil {
218 return err
219 }
218 } 220 }
219 221
220 log.Println(syscall.Getpid(), srv.Addr) 222 log.Println(os.Getpid(), srv.Addr)
221 return srv.Serve() 223 return srv.Serve()
222 } 224 }
223 225
...@@ -255,17 +257,24 @@ func (srv *graceServer) ListenAndServeTLS(certFile, keyFile string) (err error) ...@@ -255,17 +257,24 @@ func (srv *graceServer) ListenAndServeTLS(certFile, keyFile string) (err error)
255 l, err := srv.getListener(addr) 257 l, err := srv.getListener(addr)
256 if err != nil { 258 if err != nil {
257 log.Println(err) 259 log.Println(err)
258 return 260 return err
259 } 261 }
260 262
261 srv.tlsInnerListener = newGraceListener(l, srv) 263 srv.tlsInnerListener = newGraceListener(l, srv)
262 srv.GraceListener = tls.NewListener(srv.tlsInnerListener, config) 264 srv.GraceListener = tls.NewListener(srv.tlsInnerListener, config)
263 265
264 if srv.isChild { 266 if srv.isChild {
265 syscall.Kill(syscall.Getppid(), syscall.SIGTERM) 267 process, err := os.FindProcess(os.Getppid())
268 if err != nil {
269 log.Println(err)
270 return err
271 }
272 err = process.Kill()
273 if err != nil {
274 return err
275 }
266 } 276 }
267 277 log.Println(os.Getpid(), srv.Addr)
268 log.Println(syscall.Getpid(), srv.Addr)
269 return srv.Serve() 278 return srv.Serve()
270 } 279 }
271 280
...@@ -303,11 +312,8 @@ func (srv *graceServer) handleSignals() { ...@@ -303,11 +312,8 @@ func (srv *graceServer) handleSignals() {
303 signal.Notify( 312 signal.Notify(
304 srv.sigChan, 313 srv.sigChan,
305 syscall.SIGHUP, 314 syscall.SIGHUP,
306 syscall.SIGUSR1,
307 syscall.SIGUSR2,
308 syscall.SIGINT, 315 syscall.SIGINT,
309 syscall.SIGTERM, 316 syscall.SIGTERM,
310 syscall.SIGTSTP,
311 ) 317 )
312 318
313 pid := syscall.Getpid() 319 pid := syscall.Getpid()
...@@ -321,19 +327,12 @@ func (srv *graceServer) handleSignals() { ...@@ -321,19 +327,12 @@ func (srv *graceServer) handleSignals() {
321 if err != nil { 327 if err != nil {
322 log.Println("Fork err:", err) 328 log.Println("Fork err:", err)
323 } 329 }
324 case syscall.SIGUSR1:
325 log.Println(pid, "Received SIGUSR1.")
326 case syscall.SIGUSR2:
327 log.Println(pid, "Received SIGUSR2.")
328 srv.serverTimeout(0 * time.Second)
329 case syscall.SIGINT: 330 case syscall.SIGINT:
330 log.Println(pid, "Received SIGINT.") 331 log.Println(pid, "Received SIGINT.")
331 srv.shutdown() 332 srv.shutdown()
332 case syscall.SIGTERM: 333 case syscall.SIGTERM:
333 log.Println(pid, "Received SIGTERM.") 334 log.Println(pid, "Received SIGTERM.")
334 srv.shutdown() 335 srv.shutdown()
335 case syscall.SIGTSTP:
336 log.Println(pid, "Received SIGTSTP.")
337 default: 336 default:
338 log.Printf("Received %v: nothing i care about...\n", sig) 337 log.Printf("Received %v: nothing i care about...\n", sig)
339 } 338 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!