@@ -102,31 +102,39 @@ func (w *Watcher) Start() error {
102
102
}
103
103
w .fsWatcher = fsWatcher
104
104
105
+ // Traverse plugin dir and add filesystem watchers before starting the plugin processing goroutine.
106
+ if err := w .traversePluginDir (w .path ); err != nil {
107
+ w .Stop ()
108
+ return fmt .Errorf ("failed to traverse plugin socket path %q, err: %v" , w .path , err )
109
+ }
110
+
111
+ // Traverse deprecated plugin dir, if specified.
112
+ if len (w .deprecatedPath ) != 0 {
113
+ if err := w .traversePluginDir (w .deprecatedPath ); err != nil {
114
+ w .Stop ()
115
+ return fmt .Errorf ("failed to traverse deprecated plugin socket path %q, err: %v" , w .deprecatedPath , err )
116
+ }
117
+ }
118
+
105
119
w .wg .Add (1 )
106
120
go func (fsWatcher * fsnotify.Watcher ) {
107
121
defer w .wg .Done ()
122
+
108
123
for {
109
124
select {
110
125
case event := <- fsWatcher .Events :
111
126
//TODO: Handle errors by taking corrective measures
112
-
113
- w .wg .Add (1 )
114
- func () {
115
- defer w .wg .Done ()
116
-
117
- if event .Op & fsnotify .Create == fsnotify .Create {
118
- err := w .handleCreateEvent (event )
119
- if err != nil {
120
- klog .Errorf ("error %v when handling create event: %s" , err , event )
121
- }
122
- } else if event .Op & fsnotify .Remove == fsnotify .Remove {
123
- err := w .handleDeleteEvent (event )
124
- if err != nil {
125
- klog .Errorf ("error %v when handling delete event: %s" , err , event )
126
- }
127
+ if event .Op & fsnotify .Create == fsnotify .Create {
128
+ err := w .handleCreateEvent (event )
129
+ if err != nil {
130
+ klog .Errorf ("error %v when handling create event: %s" , err , event )
127
131
}
128
- return
129
- }()
132
+ } else if event .Op & fsnotify .Remove == fsnotify .Remove {
133
+ err := w .handleDeleteEvent (event )
134
+ if err != nil {
135
+ klog .Errorf ("error %v when handling delete event: %s" , err , event )
136
+ }
137
+ }
130
138
continue
131
139
case err := <- fsWatcher .Errors :
132
140
if err != nil {
@@ -139,20 +147,6 @@ func (w *Watcher) Start() error {
139
147
}
140
148
}(fsWatcher )
141
149
142
- // Traverse plugin dir after starting the plugin processing goroutine
143
- if err := w .traversePluginDir (w .path ); err != nil {
144
- w .Stop ()
145
- return fmt .Errorf ("failed to traverse plugin socket path %q, err: %v" , w .path , err )
146
- }
147
-
148
- // Traverse deprecated plugin dir, if specified.
149
- if len (w .deprecatedPath ) != 0 {
150
- if err := w .traversePluginDir (w .deprecatedPath ); err != nil {
151
- w .Stop ()
152
- return fmt .Errorf ("failed to traverse deprecated plugin socket path %q, err: %v" , w .deprecatedPath , err )
153
- }
154
- }
155
-
156
150
return nil
157
151
}
158
152
@@ -211,14 +205,14 @@ func (w *Watcher) traversePluginDir(dir string) error {
211
205
return fmt .Errorf ("failed to watch %s, err: %v" , path , err )
212
206
}
213
207
case mode & os .ModeSocket != 0 :
214
- w . wg . Add ( 1 )
215
- go func () {
216
- defer w . wg . Done ()
217
- w . fsWatcher . Events <- fsnotify. Event {
218
- Name : path ,
219
- Op : fsnotify . Create ,
220
- }
221
- }()
208
+ event := fsnotify. Event {
209
+ Name : path ,
210
+ Op : fsnotify . Create ,
211
+ }
212
+ //TODO: Handle errors by taking corrective measures
213
+ if err := w . handleCreateEvent ( event ); err != nil {
214
+ klog . Errorf ( "error %v when handling create event: %s" , err , event )
215
+ }
222
216
default :
223
217
klog .V (5 ).Infof ("Ignoring file %s with mode %v" , path , mode )
224
218
}
0 commit comments