Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
7777a231
提交
7777a231
authored
3月 18, 2015
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
updated goprocess -- bugfixes
上级
c5fbc667
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
47 行增加
和
3 行删除
+47
-3
Godeps.json
Godeps/Godeps.json
+1
-1
goprocess_test.go
...rkspace/src/github.com/jbenet/goprocess/goprocess_test.go
+38
-0
impl-mutex.go
.../_workspace/src/github.com/jbenet/goprocess/impl-mutex.go
+8
-2
没有找到文件。
Godeps/Godeps.json
浏览文件 @
7777a231
...
...
@@ -207,7 +207,7 @@
},
{
"ImportPath"
:
"github.com/jbenet/goprocess"
,
"Rev"
:
"
b4efc4c8775f0250710b39bfa716276ca10f85af
"
"Rev"
:
"
140749d0a125caaf7c9a2893d166331e2e963a7a
"
},
{
"ImportPath"
:
"github.com/kardianos/osext"
,
...
...
Godeps/_workspace/src/github.com/jbenet/goprocess/goprocess_test.go
浏览文件 @
7777a231
...
...
@@ -460,6 +460,44 @@ func TestCloseAfterChildren(t *testing.T) {
testStrs
(
t
,
Q
,
"a"
,
"d"
)
}
func
TestGoClosing
(
t
*
testing
.
T
)
{
var
ready
=
make
(
chan
struct
{})
a
:=
WithParent
(
Background
())
a
.
Go
(
func
(
p
Process
)
{
// this should be fine.
a
.
Go
(
func
(
p
Process
)
{
ready
<-
struct
{}{}
})
// set a to close. should not fully close until after this func returns.
go
a
.
Close
()
// wait until a is marked as closing
<-
a
.
Closing
()
// this should also be fine.
a
.
Go
(
func
(
p
Process
)
{
select
{
case
<-
p
.
Closing
()
:
// p should be marked as closing
default
:
t
.
Error
(
"not marked closing when it should be."
)
}
ready
<-
struct
{}{}
})
ready
<-
struct
{}{}
})
<-
ready
<-
ready
<-
ready
}
func
TestBackground
(
t
*
testing
.
T
)
{
// test it hangs indefinitely:
b
:=
Background
()
...
...
Godeps/_workspace/src/github.com/jbenet/goprocess/impl-mutex.go
浏览文件 @
7777a231
...
...
@@ -61,6 +61,8 @@ func (p *process) AddChildNoWait(child Process) {
select
{
case
<-
p
.
Closed
()
:
panic
(
"Process cannot add children after being closed"
)
case
<-
p
.
Closing
()
:
go
child
.
Close
()
default
:
}
...
...
@@ -78,6 +80,8 @@ func (p *process) AddChild(child Process) {
select
{
case
<-
p
.
Closed
()
:
panic
(
"Process cannot add children after being closed"
)
case
<-
p
.
Closing
()
:
go
child
.
Close
()
default
:
}
...
...
@@ -88,10 +92,12 @@ func (p *process) AddChild(child Process) {
func
(
p
*
process
)
Go
(
f
ProcessFunc
)
Process
{
child
:=
newProcess
(
nil
)
p
.
AddChild
(
child
)
waitFor
:=
newProcess
(
nil
)
child
.
WaitFor
(
waitFor
)
// prevent child from closing
// add child last, to prevent a closing parent from
// closing all of them prematurely, before running the func.
p
.
AddChild
(
child
)
go
func
()
{
f
(
child
)
waitFor
.
Close
()
// allow child to close.
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论