| 329 | } |
| 330 | |
| 331 | static bool validatePerfEventDescriptor(int & fd) |
| 332 | { |
| 333 | if (fcntl(fd, F_GETFL) != -1) |
| 334 | return true; |
| 335 | |
| 336 | if (errno == EBADF) |
| 337 | { |
| 338 | LOG_WARNING(getLogger("PerfEvents"), |
| 339 | "Event descriptor {} was closed from the outside; reopening", fd); |
| 340 | } |
| 341 | else |
| 342 | { |
| 343 | LOG_WARNING(getLogger("PerfEvents"), |
| 344 | "Error while checking availability of event descriptor {}: {} ({})", |
| 345 | fd, errnoToString(), errno); |
| 346 | |
| 347 | disablePerfEvent(fd); |
| 348 | releasePerfEvent(fd); |
| 349 | } |
| 350 | |
| 351 | fd = -1; |
| 352 | return false; |
| 353 | } |
| 354 | |
| 355 | bool PerfEventsCounters::processThreadLocalChanges(const std::string & needed_events_list) |
| 356 | { |
no test coverage detected