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
65738c1e
Unverified
Commit
65738c1e
authored
Oct 20, 2017
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
event: fix datarace between Subscribe and Send
parent
0e7d019e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
5 additions
and
3 deletions
+5
-3
feed.go
event/feed.go
+5
-3
No files found.
event/feed.go
View file @
65738c1e
...
...
@@ -127,6 +127,8 @@ func (f *Feed) remove(sub *feedSub) {
// Send delivers to all subscribed channels simultaneously.
// It returns the number of subscribers that the value was sent to.
func
(
f
*
Feed
)
Send
(
value
interface
{})
(
nsent
int
)
{
rvalue
:=
reflect
.
ValueOf
(
value
)
f
.
once
.
Do
(
f
.
init
)
<-
f
.
sendLock
...
...
@@ -134,14 +136,14 @@ func (f *Feed) Send(value interface{}) (nsent int) {
f
.
mu
.
Lock
()
f
.
sendCases
=
append
(
f
.
sendCases
,
f
.
inbox
...
)
f
.
inbox
=
nil
f
.
mu
.
Unlock
()
// Set the sent value on all channels.
rvalue
:=
reflect
.
ValueOf
(
value
)
if
!
f
.
typecheck
(
rvalue
.
Type
())
{
f
.
sendLock
<-
struct
{}{}
panic
(
feedTypeError
{
op
:
"Send"
,
got
:
rvalue
.
Type
(),
want
:
f
.
etype
})
}
f
.
mu
.
Unlock
()
// Set the sent value on all channels.
for
i
:=
firstSubSendCase
;
i
<
len
(
f
.
sendCases
);
i
++
{
f
.
sendCases
[
i
]
.
Send
=
rvalue
}
...
...
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