Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
f25dfb68
提交
f25dfb68
authored
1月 05, 2015
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
peer/queue: close fix, and logging
上级
09a2e1f6
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
16 行增加
和
3 行删除
+16
-3
sync.go
p2p/peer/queue/sync.go
+16
-3
没有找到文件。
p2p/peer/queue/sync.go
浏览文件 @
f25dfb68
...
...
@@ -4,8 +4,11 @@ import (
context
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
peer
"github.com/jbenet/go-ipfs/p2p/peer"
eventlog
"github.com/jbenet/go-ipfs/util/eventlog"
)
var
log
=
eventlog
.
Logger
(
"peerqueue"
)
// ChanQueue makes any PeerQueue synchronizable through channels.
type
ChanQueue
struct
{
Queue
PeerQueue
...
...
@@ -21,6 +24,7 @@ func NewChanQueue(ctx context.Context, pq PeerQueue) *ChanQueue {
}
func
(
cq
*
ChanQueue
)
process
(
ctx
context
.
Context
)
{
log
:=
log
.
Prefix
(
"<ChanQueue %p>"
,
cq
)
// construct the channels here to be able to use them bidirectionally
enqChan
:=
make
(
chan
peer
.
ID
)
...
...
@@ -30,6 +34,8 @@ func (cq *ChanQueue) process(ctx context.Context) {
cq
.
DeqChan
=
deqChan
go
func
()
{
log
.
Debug
(
"processing"
)
defer
log
.
Debug
(
"closed"
)
defer
close
(
deqChan
)
var
next
peer
.
ID
...
...
@@ -38,11 +44,13 @@ func (cq *ChanQueue) process(ctx context.Context) {
for
{
if
cq
.
Queue
.
Len
()
==
0
{
// log.Debug("wait for enqueue")
select
{
case
next
,
more
=
<-
enqChan
:
if
!
more
{
return
}
// log.Debug("got", next)
case
<-
ctx
.
Done
()
:
return
...
...
@@ -50,19 +58,24 @@ func (cq *ChanQueue) process(ctx context.Context) {
}
else
{
next
=
cq
.
Queue
.
Dequeue
()
// log.Debug("peek", next)
}
select
{
case
item
,
more
=
<-
enqChan
:
if
!
more
{
return
if
cq
.
Queue
.
Len
()
>
0
{
return
// we're done done.
}
enqChan
=
nil
// closed, so no use.
}
// log.Debug("got", item)
cq
.
Queue
.
Enqueue
(
item
)
cq
.
Queue
.
Enqueue
(
next
)
cq
.
Queue
.
Enqueue
(
next
)
// order may have changed.
next
=
""
case
deqChan
<-
next
:
// log.Debug("dequeued", next)
next
=
""
case
<-
ctx
.
Done
()
:
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论