Commit 5d407427 authored by Dmitriy Vyukov's avatar Dmitriy Vyukov

runtime: convert Gosched to Go

LGTM=rlh, khr
R=golang-codereviews, rlh, bradfitz, khr
CC=golang-codereviews, rsc
https://golang.org/cl/127490043
parent 53056c37
...@@ -73,10 +73,6 @@ of the run-time system. ...@@ -73,10 +73,6 @@ of the run-time system.
*/ */
package runtime package runtime
// Gosched yields the processor, allowing other goroutines to run. It does not
// suspend the current goroutine, so execution resumes automatically.
func Gosched()
// Goexit terminates the goroutine that calls it. No other goroutine is affected. // Goexit terminates the goroutine that calls it. No other goroutine is affected.
// Goexit runs all deferred calls before terminating the goroutine. // Goexit runs all deferred calls before terminating the goroutine.
// //
......
...@@ -1449,15 +1449,15 @@ park0(G *gp) ...@@ -1449,15 +1449,15 @@ park0(G *gp)
void void
runtime·gosched(void) runtime·gosched(void)
{ {
if(g->status != Grunning) runtime·mcall(runtime·gosched_m);
runtime·throw("bad g status");
runtime·mcall(runtime·gosched0);
} }
// runtime·gosched continuation on g0. // runtime·gosched continuation on g0.
void void
runtime·gosched0(G *gp) runtime·gosched_m(G *gp)
{ {
if(gp->status != Grunning)
runtime·throw("bad g status");
gp->status = Grunnable; gp->status = Grunnable;
dropg(); dropg();
runtime·lock(&runtime·sched.lock); runtime·lock(&runtime·sched.lock);
...@@ -2055,12 +2055,6 @@ runtime·Breakpoint(void) ...@@ -2055,12 +2055,6 @@ runtime·Breakpoint(void)
runtime·breakpoint(); runtime·breakpoint();
} }
void
runtime·Gosched(void)
{
runtime·gosched();
}
// Implementation of runtime.GOMAXPROCS. // Implementation of runtime.GOMAXPROCS.
// delete when scheduler is even stronger // delete when scheduler is even stronger
int32 int32
......
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package runtime
// Gosched yields the processor, allowing other goroutines to run. It does not
// suspend the current goroutine, so execution resumes automatically.
func Gosched() {
mcall(&gosched_m)
}
...@@ -919,7 +919,7 @@ void runtime·newextram(void); ...@@ -919,7 +919,7 @@ void runtime·newextram(void);
void runtime·exit(int32); void runtime·exit(int32);
void runtime·breakpoint(void); void runtime·breakpoint(void);
void runtime·gosched(void); void runtime·gosched(void);
void runtime·gosched0(G*); void runtime·gosched_m(G*);
void runtime·schedtrace(bool); void runtime·schedtrace(bool);
void runtime·park(bool(*)(G*, void*), void*, int8*); void runtime·park(bool(*)(G*, void*), void*, int8*);
void runtime·parkunlock(Lock*, int8*); void runtime·parkunlock(Lock*, int8*);
......
...@@ -903,7 +903,7 @@ runtime·newstack(void) ...@@ -903,7 +903,7 @@ runtime·newstack(void)
} }
// Act like goroutine called runtime.Gosched. // Act like goroutine called runtime.Gosched.
gp->status = oldstatus; gp->status = oldstatus;
runtime·gosched0(gp); // never return runtime·gosched_m(gp); // never return
} }
// If every frame on the top segment is copyable, allocate a bigger segment // If every frame on the top segment is copyable, allocate a bigger segment
......
...@@ -68,7 +68,8 @@ var ( ...@@ -68,7 +68,8 @@ var (
setFinalizer_m, setFinalizer_m,
markallocated_m, markallocated_m,
unrollgcprog_m, unrollgcprog_m,
unrollgcproginplace_m mFunction unrollgcproginplace_m,
gosched_m mFunction
) )
// memclr clears n bytes starting at ptr. // memclr clears n bytes starting at ptr.
......
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