-
Notifications
You must be signed in to change notification settings - Fork 252
Write Events/Errors using select #7
Comments
What would this look like? Same channels/API just without requiring a goroutine? |
Yes.
|
Chime in for the os/notify API: http://goo.gl/MrYxyA |
I'm not sure what makes this single thread unfriendly? Why can't I do something like: func main() {
// create watcher
w.Add("./")
for {
select {
case <-w.Events:
// do stuff
case <-w.Errors:
// handle error
case <-sig:
// signal received, probably quit
}
}
} |
See https://code.google.com/p/go/issues/detail?id=8282#c4 for one issue when using code very similar to what you presented. If you want to take a closer look on multiple platforms, please report your findings at https://github.com/fsnotify/fsnotify/issues/new |
Right. I suppose this is only an issue on some platforms (old linux? I saw some mentioning of the lowest linux denominator being too low to stop this from happening). Anyway, I'll run it in a separate goroutine for the time being and monitor this space. I'd love to be able to safely use it in single-threaded mode. As it stands, it's not very obvious one needs to do this goroutine trick. Thanks for the update! |
At GopherCon India last month, Alan Shreve gave a talk on Principles of designing Go APIs with channels which i thought might be relevant for this issue in FSNotify since I too had to puzzle through the sources to check if it's using blocking channels... Specifically An API that sends an unbounded stream of values into a channel must document how it behaves for slow consumers |
@srinathh Thanks for the tip. Now that the videos are up, I'll be sure to watch that talk. |
Is this still an issue? golang/go#8282 (comment) If so, what would be the non-racey way of doing this? |
For some very obscure reason (or let's call it "badly explained"), the reading from the event and error channel should take place in a separate goroutine. See howeyc/fsnotify#7 for a discussion about it. Apparently, something may block if done otherwise. Although all material about this topic fails to give a code example that exhibits this problem, I obey and put the events reader into its own goroutine.
This is a request that came up earlier that I almost forgot about. Creating issue so I remember.
Desire is to have the library send events/errors using select so that the receiving application can be monitoring the channels without the use of a separate goroutine.
The text was updated successfully, but these errors were encountered: