@@ -116,34 +116,12 @@ func (r *Request) lsInc(offset int64) {
116
116
}
117
117
118
118
// manage file read/write state
119
- func (r * Request ) setWriterState (wa io.WriterAt ) {
120
- r .state .Lock ()
121
- defer r .state .Unlock ()
122
- r .state .writerAt = wa
123
- }
124
- func (r * Request ) setReaderState (ra io.ReaderAt ) {
125
- r .state .Lock ()
126
- defer r .state .Unlock ()
127
- r .state .readerAt = ra
128
- }
129
119
func (r * Request ) setListerState (la ListerAt ) {
130
120
r .state .Lock ()
131
121
defer r .state .Unlock ()
132
122
r .state .listerAt = la
133
123
}
134
124
135
- func (r * Request ) getWriter () io.WriterAt {
136
- r .state .RLock ()
137
- defer r .state .RUnlock ()
138
- return r .state .writerAt
139
- }
140
-
141
- func (r * Request ) getReader () io.ReaderAt {
142
- r .state .RLock ()
143
- defer r .state .RUnlock ()
144
- return r .state .readerAt
145
- }
146
-
147
125
func (r * Request ) getLister () ListerAt {
148
126
r .state .RLock ()
149
127
defer r .state .RUnlock ()
@@ -157,11 +135,15 @@ func (r *Request) close() error {
157
135
r .cancelCtx ()
158
136
}
159
137
}()
160
- rd := r .getReader ()
138
+ r .state .RLock ()
139
+ rd := r .state .readerAt
140
+ r .state .RUnlock ()
161
141
if c , ok := rd .(io.Closer ); ok {
162
142
return c .Close ()
163
143
}
164
- wt := r .getWriter ()
144
+ r .state .RLock ()
145
+ wt := r .state .writerAt
146
+ r .state .RUnlock ()
165
147
if c , ok := wt .(io.Closer ); ok {
166
148
return c .Close ()
167
149
}
@@ -204,13 +186,20 @@ func packetData(p requestPacket) (data []byte, offset int64, length uint32) {
204
186
// wrap FileReader handler
205
187
func fileget (h FileReader , r * Request , pkt requestPacket ) responsePacket {
206
188
var err error
207
- reader := r .getReader ()
189
+ r .state .RLock ()
190
+ reader := r .state .readerAt
191
+ r .state .RUnlock ()
208
192
if reader == nil {
209
- reader , err = h .Fileread (r )
210
- if err != nil {
211
- return statusFromError (pkt , err )
193
+ r .state .Lock ()
194
+ if r .state .readerAt == nil {
195
+ r .state .readerAt , err = h .Fileread (r )
196
+ if err != nil {
197
+ r .state .Unlock ()
198
+ return statusFromError (pkt , err )
199
+ }
212
200
}
213
- r .setReaderState (reader )
201
+ reader = r .state .readerAt
202
+ r .state .Unlock ()
214
203
}
215
204
216
205
_ , offset , length := packetData (pkt )
@@ -230,13 +219,20 @@ func fileget(h FileReader, r *Request, pkt requestPacket) responsePacket {
230
219
// wrap FileWriter handler
231
220
func fileput (h FileWriter , r * Request , pkt requestPacket ) responsePacket {
232
221
var err error
233
- writer := r .getWriter ()
222
+ r .state .RLock ()
223
+ writer := r .state .writerAt
224
+ r .state .RUnlock ()
234
225
if writer == nil {
235
- writer , err = h .Filewrite (r )
236
- if err != nil {
237
- return statusFromError (pkt , err )
226
+ r .state .Lock ()
227
+ if r .state .writerAt == nil {
228
+ r .state .writerAt , err = h .Filewrite (r )
229
+ if err != nil {
230
+ r .state .Unlock ()
231
+ return statusFromError (pkt , err )
232
+ }
238
233
}
239
- r .setWriterState (writer )
234
+ writer = r .state .writerAt
235
+ r .state .Unlock ()
240
236
}
241
237
242
238
data , offset , _ := packetData (pkt )
0 commit comments