@@ -40,14 +40,17 @@ func initAutoScaling(mainThread *phpMainThread) {
4040 return
4141 }
4242
43+ done := mainThread .done
44+ mstate := mainThread .state
45+
4346 scalingMu .Lock ()
4447 scaleChan = make (chan * frankenPHPContext )
4548 maxScaledThreads := mainThread .maxThreads - mainThread .numThreads
4649 autoScaledThreads = make ([]* phpThread , 0 , maxScaledThreads )
4750 scalingMu .Unlock ()
4851
49- go startUpscalingThreads (maxScaledThreads , scaleChan , mainThread . done )
50- go startDownScalingThreads (mainThread . done )
52+ go startUpscalingThreads (maxScaledThreads , scaleChan , done , mstate )
53+ go startDownScalingThreads (done )
5154}
5255
5356func drainAutoScaling () {
@@ -81,16 +84,16 @@ func addWorkerThread(worker *worker) (*phpThread, error) {
8184}
8285
8386// scaleWorkerThread adds a worker PHP thread automatically
84- func scaleWorkerThread (worker * worker ) {
87+ func scaleWorkerThread (worker * worker , done chan struct {}, mstate * state. ThreadState ) {
8588 // probe CPU usage before acquiring the lock (avoids holding lock during 120ms sleep)
86- if ! cpu .ProbeCPUs (cpuProbeTime , maxCpuUsageForScaling , mainThread . done ) {
89+ if ! cpu .ProbeCPUs (cpuProbeTime , maxCpuUsageForScaling , done ) {
8790 return
8891 }
8992
9093 scalingMu .Lock ()
9194 defer scalingMu .Unlock ()
9295
93- if ! mainThread . state .Is (state .Ready ) {
96+ if ! mstate .Is (state .Ready ) {
9497 return
9598 }
9699
@@ -111,16 +114,16 @@ func scaleWorkerThread(worker *worker) {
111114}
112115
113116// scaleRegularThread adds a regular PHP thread automatically
114- func scaleRegularThread () {
117+ func scaleRegularThread (done chan struct {}, mstate * state. ThreadState ) {
115118 // probe CPU usage before acquiring the lock (avoids holding lock during 120ms sleep)
116- if ! cpu .ProbeCPUs (cpuProbeTime , maxCpuUsageForScaling , mainThread . done ) {
119+ if ! cpu .ProbeCPUs (cpuProbeTime , maxCpuUsageForScaling , done ) {
117120 return
118121 }
119122
120123 scalingMu .Lock ()
121124 defer scalingMu .Unlock ()
122125
123- if ! mainThread . state .Is (state .Ready ) {
126+ if ! mstate .Is (state .Ready ) {
124127 return
125128 }
126129
@@ -140,7 +143,7 @@ func scaleRegularThread() {
140143 }
141144}
142145
143- func startUpscalingThreads (maxScaledThreads int , scale chan * frankenPHPContext , done chan struct {}) {
146+ func startUpscalingThreads (maxScaledThreads int , scale chan * frankenPHPContext , done chan struct {}, mstate * state. ThreadState ) {
144147 for {
145148 scalingMu .Lock ()
146149 scaledThreadCount := len (autoScaledThreads )
@@ -171,7 +174,7 @@ func startUpscalingThreads(maxScaledThreads int, scale chan *frankenPHPContext,
171174
172175 // if the request has been stalled long enough, scale
173176 if fc .worker == nil {
174- scaleRegularThread ()
177+ scaleRegularThread (done , mstate )
175178 continue
176179 }
177180
@@ -184,7 +187,7 @@ func startUpscalingThreads(maxScaledThreads int, scale chan *frankenPHPContext,
184187 continue
185188 }
186189
187- scaleWorkerThread (fc .worker )
190+ scaleWorkerThread (fc .worker , done , mstate )
188191 case <- done :
189192 return
190193 }
0 commit comments