summaryrefslogtreecommitdiff
path: root/libgo/runtime/go-defer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/runtime/go-defer.c')
-rw-r--r--libgo/runtime/go-defer.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libgo/runtime/go-defer.c b/libgo/runtime/go-defer.c
index dda62fb4e1a..c27de6ab463 100644
--- a/libgo/runtime/go-defer.c
+++ b/libgo/runtime/go-defer.c
@@ -16,8 +16,10 @@
void
__go_defer (_Bool *frame, void (*pfn) (void *), void *arg)
{
+ G *g;
struct __go_defer_stack *n;
+ g = runtime_g ();
n = (struct __go_defer_stack *) __go_alloc (sizeof (struct __go_defer_stack));
n->__next = g->defer;
n->__frame = frame;
@@ -33,6 +35,9 @@ __go_defer (_Bool *frame, void (*pfn) (void *), void *arg)
void
__go_undefer (_Bool *frame)
{
+ G *g;
+
+ g = runtime_g ();
while (g->defer != NULL && g->defer->__frame == frame)
{
struct __go_defer_stack *d;
@@ -63,6 +68,9 @@ __go_undefer (_Bool *frame)
_Bool
__go_set_defer_retaddr (void *retaddr)
{
+ G *g;
+
+ g = runtime_g ();
if (g->defer != NULL)
g->defer->__retaddr = retaddr;
return 0;