Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
b3c0e9d3
G
go-ethereum
项目概览
whqwjb
/
go-ethereum
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
go-ethereum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
b3c0e9d3
编写于
1月 30, 2017
作者:
P
Péter Szilágyi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
accounts/usbwallet: two phase Ledger refreshes to avoid Windows bug
上级
470b7938
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
25 deletion
+24
-25
accounts/usbwallet/ledger.go
accounts/usbwallet/ledger.go
+24
-25
未找到文件。
accounts/usbwallet/ledger.go
浏览文件 @
b3c0e9d3
...
...
@@ -234,32 +234,11 @@ func (hub *LedgerHub) rescan() {
hub
.
lock
.
Lock
()
defer
hub
.
lock
.
Unlock
()
// Iterate over all attached devices and fetch those seemingly Ledger
present
:=
make
(
map
[
uint16
]
bool
)
devices
,
_
:=
hub
.
ctx
.
ListDevices
(
func
(
desc
*
usb
.
Descriptor
)
bool
{
// Discard all devices not advertizing as Ledger
ledger
:=
false
for
_
,
id
:=
range
ledgerDeviceIDs
{
if
desc
.
Vendor
==
id
.
Vendor
&&
desc
.
Product
==
id
.
Product
{
ledger
=
true
}
}
if
!
ledger
{
return
false
}
// If we have a Ledger, mark as still present, or open as new
id
:=
uint16
(
desc
.
Bus
)
<<
8
+
uint16
(
desc
.
Address
)
if
_
,
known
:=
hub
.
wallets
[
id
];
known
{
// Track it's presence, but don't open again
present
[
id
]
=
true
return
false
}
// New Ledger device, open it for communication
return
true
})
// Drop any tracker wallet which disconnected
// Iterate over all connected Ledger devices and do a heartbeat test
for
id
,
wallet
:=
range
hub
.
wallets
{
if
!
present
[
id
]
{
// If the device doesn't respond (io error on Windows, no device on Linux), drop
if
err
:=
wallet
.
resolveVersion
();
err
==
usb
.
ERROR_IO
||
err
==
usb
.
ERROR_NO_DEVICE
{
// Wallet disconnected or at least in a useless state
if
wallet
.
address
==
(
common
.
Address
{})
{
glog
.
V
(
logger
.
Info
)
.
Infof
(
"ledger wallet [%03d.%03d] disconnected"
,
wallet
.
device
.
Bus
,
wallet
.
device
.
Address
)
}
else
{
...
...
@@ -279,6 +258,26 @@ func (hub *LedgerHub) rescan() {
wallet
.
device
.
Close
()
}
}
// Iterate over all attached devices and fetch those seemingly Ledger
devices
,
_
:=
hub
.
ctx
.
ListDevices
(
func
(
desc
*
usb
.
Descriptor
)
bool
{
// Discard all devices not advertizing as Ledger
ledger
:=
false
for
_
,
id
:=
range
ledgerDeviceIDs
{
if
desc
.
Vendor
==
id
.
Vendor
&&
desc
.
Product
==
id
.
Product
{
ledger
=
true
}
}
if
!
ledger
{
return
false
}
// If we have an already known Ledger, skip opening it
id
:=
uint16
(
desc
.
Bus
)
<<
8
+
uint16
(
desc
.
Address
)
if
_
,
known
:=
hub
.
wallets
[
id
];
known
{
return
false
}
// New Ledger device, open it for communication
return
true
})
// Start tracking all wallets which newly appeared
var
err
error
for
_
,
device
:=
range
devices
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录