Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
19c4bf6f
Commit
19c4bf6f
authored
Mar 19, 2014
by
take_cheeze
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
revert MRB_FIBER_RESUMED as MRB_FIBER_RESUMING to fix recurive resume
parent
792c1add
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
8 additions
and
4 deletions
+8
-4
include/mruby.h
include/mruby.h
+1
-0
mrbgems/mruby-fiber/src/fiber.c
mrbgems/mruby-fiber/src/fiber.c
+2
-3
mrbgems/mruby-fiber/test/fiber.rb
mrbgems/mruby-fiber/test/fiber.rb
+5
-1
No files found.
include/mruby.h
View file @
19c4bf6f
...
...
@@ -70,6 +70,7 @@ typedef struct {
enum
mrb_fiber_state
{
MRB_FIBER_CREATED
=
0
,
MRB_FIBER_RUNNING
,
MRB_FIBER_RESUMING
,
MRB_FIBER_SUSPENDED
,
MRB_FIBER_TERMINATED
,
};
...
...
mrbgems/mruby-fiber/src/fiber.c
View file @
19c4bf6f
...
...
@@ -164,13 +164,14 @@ fiber_resume(mrb_state *mrb, mrb_value self)
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"can't cross C function boundary"
);
}
}
if
(
c
->
status
==
MRB_FIBER_RUNNING
||
(
mrb
->
c
->
prev
&&
mrb
->
c
->
prev
!=
mrb
->
root_c
)
)
{
if
(
c
->
status
==
MRB_FIBER_RUNNING
||
c
->
status
==
MRB_FIBER_RESUMING
)
{
mrb_raise
(
mrb
,
E_RUNTIME_ERROR
,
"double resume"
);
}
if
(
c
->
status
==
MRB_FIBER_TERMINATED
)
{
mrb_raise
(
mrb
,
E_RUNTIME_ERROR
,
"resuming dead fiber"
);
}
mrb_get_args
(
mrb
,
"*"
,
&
a
,
&
len
);
mrb
->
c
->
status
=
MRB_FIBER_RESUMING
;
if
(
c
->
status
==
MRB_FIBER_CREATED
)
{
mrb_value
*
b
=
c
->
stack
+
1
;
mrb_value
*
e
=
b
+
len
;
...
...
@@ -183,7 +184,6 @@ fiber_resume(mrb_state *mrb, mrb_value self)
if
(
c
->
prev
->
fib
)
mrb_field_write_barrier
(
mrb
,
(
struct
RBasic
*
)
c
->
fib
,
(
struct
RBasic
*
)
c
->
prev
->
fib
);
mrb_write_barrier
(
mrb
,
(
struct
RBasic
*
)
c
->
fib
);
mrb
->
c
->
status
=
MRB_FIBER_SUSPENDED
;
c
->
status
=
MRB_FIBER_RUNNING
;
mrb
->
c
=
c
;
...
...
@@ -195,7 +195,6 @@ fiber_resume(mrb_state *mrb, mrb_value self)
if
(
c
->
prev
->
fib
)
mrb_field_write_barrier
(
mrb
,
(
struct
RBasic
*
)
c
->
fib
,
(
struct
RBasic
*
)
c
->
prev
->
fib
);
mrb_write_barrier
(
mrb
,
(
struct
RBasic
*
)
c
->
fib
);
mrb
->
c
->
status
=
MRB_FIBER_SUSPENDED
;
c
->
status
=
MRB_FIBER_RUNNING
;
mrb
->
c
=
c
;
return
fiber_result
(
mrb
,
a
,
len
);
...
...
mrbgems/mruby-fiber/test/fiber.rb
View file @
19c4bf6f
...
...
@@ -96,8 +96,12 @@ assert('Recursive resume of Fiber') do
f1
.
resume
Fiber
.
yield
0
}
assert_equal
0
,
f2
.
resume
f3
=
Fiber
.
new
{
f2
.
resume
}
assert_equal
0
,
f3
.
resume
f2
.
resume
assert_false
f1
.
alive?
assert_false
f2
.
alive?
assert_false
f3
.
alive?
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment