Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(409)

Side by Side Diff: base/files/file_path_watcher_kqueue.cc

Issue 10500012: Removed file_path_watcher_mac.cc, which isn't used anymore. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: . Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/files/file_path_watcher.h ('k') | base/files/file_path_watcher_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/files/file_path_watcher.h" 5 #include "base/files/file_path_watcher.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <sys/event.h> 8 #include <sys/event.h>
9 #include <sys/param.h> 9 #include <sys/param.h>
10 10
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 int FilePathWatcherImpl::FileDescriptorForPath(const FilePath& path) { 198 int FilePathWatcherImpl::FileDescriptorForPath(const FilePath& path) {
199 return HANDLE_EINTR(open(path.value().c_str(), O_EVTONLY)); 199 return HANDLE_EINTR(open(path.value().c_str(), O_EVTONLY));
200 } 200 }
201 201
202 void FilePathWatcherImpl::CloseFileDescriptor(int *fd) { 202 void FilePathWatcherImpl::CloseFileDescriptor(int *fd) {
203 if (*fd == -1) { 203 if (*fd == -1) {
204 return; 204 return;
205 } 205 }
206 206
207 if (HANDLE_EINTR(close(*fd)) != 0) { 207 if (HANDLE_EINTR(close(*fd)) != 0) {
208 PLOG(ERROR) << "close"; 208 DPLOG(ERROR) << "close";
Mattias Nissler (ping if slow) 2012/06/04 07:40:50 Why are you muting all the error logging? Many of
Joao da Silva 2012/06/04 08:06:44 From http://codereview.chromium.org/8341026/, whic
209 } 209 }
210 *fd = -1; 210 *fd = -1;
211 } 211 }
212 212
213 bool FilePathWatcherImpl::AreKeventValuesValid(struct kevent* kevents, 213 bool FilePathWatcherImpl::AreKeventValuesValid(struct kevent* kevents,
214 int count) { 214 int count) {
215 if (count < 0) { 215 if (count < 0) {
216 PLOG(ERROR) << "kevent"; 216 DPLOG(ERROR) << "kevent";
217 return false; 217 return false;
218 } 218 }
219 bool valid = true; 219 bool valid = true;
220 for (int i = 0; i < count; ++i) { 220 for (int i = 0; i < count; ++i) {
221 if (kevents[i].flags & EV_ERROR && kevents[i].data) { 221 if (kevents[i].flags & EV_ERROR && kevents[i].data) {
222 // Find the kevent in |events_| that matches the kevent with the error. 222 // Find the kevent in |events_| that matches the kevent with the error.
223 EventVector::iterator event = events_.begin(); 223 EventVector::iterator event = events_.begin();
224 for (; event != events_.end(); ++event) { 224 for (; event != events_.end(); ++event) {
225 if (event->ident == kevents[i].ident) { 225 if (event->ident == kevents[i].ident) {
226 break; 226 break;
227 } 227 }
228 } 228 }
229 std::string path_name; 229 std::string path_name;
230 if (event != events_.end()) { 230 if (event != events_.end()) {
231 EventData* event_data = EventDataForKevent(*event); 231 EventData* event_data = EventDataForKevent(*event);
232 if (event_data != NULL) { 232 if (event_data != NULL) {
233 path_name = event_data->path_.value(); 233 path_name = event_data->path_.value();
234 } 234 }
235 } 235 }
236 if (path_name.empty()) { 236 if (path_name.empty()) {
237 path_name = base::StringPrintf( 237 path_name = base::StringPrintf(
238 "fd %d", *reinterpret_cast<int*>(&kevents[i].ident)); 238 "fd %d", *reinterpret_cast<int*>(&kevents[i].ident));
239 } 239 }
240 LOG(ERROR) << "Error: " << kevents[i].data << " for " << path_name; 240 DLOG(ERROR) << "Error: " << kevents[i].data << " for " << path_name;
241 valid = false; 241 valid = false;
242 } 242 }
243 } 243 }
244 return valid; 244 return valid;
245 } 245 }
246 246
247 void FilePathWatcherImpl::HandleAttributesChange( 247 void FilePathWatcherImpl::HandleAttributesChange(
248 const EventVector::iterator& event, 248 const EventVector::iterator& event,
249 bool* target_file_affected, 249 bool* target_file_affected,
250 bool* update_watches) { 250 bool* update_watches) {
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 } else { 341 } else {
342 break; 342 break;
343 } 343 }
344 } 344 }
345 } 345 }
346 return true; 346 return true;
347 } 347 }
348 348
349 void FilePathWatcherImpl::OnFileCanReadWithoutBlocking(int fd) { 349 void FilePathWatcherImpl::OnFileCanReadWithoutBlocking(int fd) {
350 DCHECK(MessageLoopForIO::current()); 350 DCHECK(MessageLoopForIO::current());
351 CHECK_EQ(fd, kqueue_); 351 DCHECK_EQ(fd, kqueue_);
352 CHECK(events_.size()); 352 DCHECK(events_.size());
353 353
354 // Request the file system update notifications that have occurred and return 354 // Request the file system update notifications that have occurred and return
355 // them in |updates|. |count| will contain the number of updates that have 355 // them in |updates|. |count| will contain the number of updates that have
356 // occurred. 356 // occurred.
357 EventVector updates(events_.size()); 357 EventVector updates(events_.size());
358 struct timespec timeout = {0, 0}; 358 struct timespec timeout = {0, 0};
359 int count = HANDLE_EINTR(kevent(kqueue_, NULL, 0, &updates[0], updates.size(), 359 int count = HANDLE_EINTR(kevent(kqueue_, NULL, 0, &updates[0], updates.size(),
360 &timeout)); 360 &timeout));
361 361
362 // Error values are stored within updates, so check to make sure that no 362 // Error values are stored within updates, so check to make sure that no
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 DCHECK_EQ(kqueue_, -1); 435 DCHECK_EQ(kqueue_, -1);
436 436
437 delegate_ = delegate; 437 delegate_ = delegate;
438 target_ = path; 438 target_ = path;
439 439
440 MessageLoop::current()->AddDestructionObserver(this); 440 MessageLoop::current()->AddDestructionObserver(this);
441 io_message_loop_ = base::MessageLoopProxy::current(); 441 io_message_loop_ = base::MessageLoopProxy::current();
442 442
443 kqueue_ = kqueue(); 443 kqueue_ = kqueue();
444 if (kqueue_ == -1) { 444 if (kqueue_ == -1) {
445 PLOG(ERROR) << "kqueue"; 445 DPLOG(ERROR) << "kqueue";
446 return false; 446 return false;
447 } 447 }
448 448
449 int last_entry = EventsForPath(target_, &events_); 449 int last_entry = EventsForPath(target_, &events_);
450 CHECK_NE(last_entry, 0); 450 DCHECK_NE(last_entry, 0);
451 451
452 EventVector responses(last_entry); 452 EventVector responses(last_entry);
453 453
454 int count = HANDLE_EINTR(kevent(kqueue_, &events_[0], last_entry, 454 int count = HANDLE_EINTR(kevent(kqueue_, &events_[0], last_entry,
455 &responses[0], last_entry, NULL)); 455 &responses[0], last_entry, NULL));
456 if (!AreKeventValuesValid(&responses[0], count)) { 456 if (!AreKeventValuesValid(&responses[0], count)) {
457 // Calling Cancel() here to close any file descriptors that were opened. 457 // Calling Cancel() here to close any file descriptors that were opened.
458 // This would happen in the destructor anyways, but FilePathWatchers tend to 458 // This would happen in the destructor anyways, but FilePathWatchers tend to
459 // be long lived, and if an error has occurred, there is no reason to waste 459 // be long lived, and if an error has occurred, there is no reason to waste
460 // the file descriptors. 460 // the file descriptors.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 } 495 }
496 496
497 } // namespace 497 } // namespace
498 498
499 FilePathWatcher::FilePathWatcher() { 499 FilePathWatcher::FilePathWatcher() {
500 impl_ = new FilePathWatcherImpl(); 500 impl_ = new FilePathWatcherImpl();
501 } 501 }
502 502
503 } // namespace files 503 } // namespace files
504 } // namespace base 504 } // namespace base
OLDNEW
« no previous file with comments | « base/files/file_path_watcher.h ('k') | base/files/file_path_watcher_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698