Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
8ff7e55a
Unverified
Commit
8ff7e55a
authored
Mar 23, 2017
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
accounts/usbwallet: if a confirmation is pending, skip refresh
parent
26da6daa
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
3 deletions
+16
-3
ledger_hub.go
accounts/usbwallet/ledger_hub.go
+8
-1
ledger_wallet.go
accounts/usbwallet/ledger_wallet.go
+8
-2
No files found.
accounts/usbwallet/ledger_hub.go
View file @
8ff7e55a
...
...
@@ -58,7 +58,10 @@ type LedgerHub struct {
quit
chan
chan
error
stateLock
sync
.
RWMutex
// Protects the internals of the hub from racey access
commsLock
sync
.
RWMutex
// Allows wallets to lock enumeration (TODO(karalabe): remove if hotplug lands on Windows)
// TODO(karalabe): remove if hotplug lands on Windows
commsPend
int
// Number of operations blocking enumeration
commsLock
sync
.
Mutex
// Lock protecting the pending counter and enumeration
}
// NewLedgerHub creates a new hardware wallet manager for Ledger devices.
...
...
@@ -109,6 +112,10 @@ func (hub *LedgerHub) refreshWallets() {
// be to ditch enumeration in favor of hutplug events, but that don't work yet
// on Windows so if we need to hack it anyway, this is more elegant for now.
hub
.
commsLock
.
Lock
()
if
hub
.
commsPend
>
0
{
// A confirmation is pending, don't refresh
hub
.
commsLock
.
Unlock
()
return
}
}
for
_
,
info
:=
range
hid
.
Enumerate
(
0
,
0
)
{
// Can't enumerate directly, one valid ID is the 0 wildcard
for
_
,
id
:=
range
ledgerDeviceIDs
{
...
...
accounts/usbwallet/ledger_wallet.go
View file @
8ff7e55a
...
...
@@ -579,9 +579,15 @@ func (w *ledgerWallet) SignTx(account accounts.Account, tx *types.Transaction, c
// Ensure the device isn't screwed with while user confirmation is pending
// TODO(karalabe): remove if hotplug lands on Windows
w
.
hub
.
commsLock
.
RLock
()
defer
w
.
hub
.
commsLock
.
RUnlock
()
w
.
hub
.
commsLock
.
Lock
()
w
.
hub
.
commsPend
++
w
.
hub
.
commsLock
.
Unlock
()
defer
func
()
{
w
.
hub
.
commsLock
.
Lock
()
w
.
hub
.
commsPend
--
w
.
hub
.
commsLock
.
Unlock
()
}()
return
w
.
ledgerSign
(
path
,
account
.
Address
,
tx
,
chainID
)
}
...
...
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