| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 #include "webrtc/base/physicalsocketserver.h" | 10 #include "webrtc/base/physicalsocketserver.h" |
| (...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1111 class EventDispatcher : public Dispatcher { | 1111 class EventDispatcher : public Dispatcher { |
| 1112 public: | 1112 public: |
| 1113 EventDispatcher(PhysicalSocketServer *ss) : ss_(ss) { | 1113 EventDispatcher(PhysicalSocketServer *ss) : ss_(ss) { |
| 1114 hev_ = WSACreateEvent(); | 1114 hev_ = WSACreateEvent(); |
| 1115 if (hev_) { | 1115 if (hev_) { |
| 1116 ss_->Add(this); | 1116 ss_->Add(this); |
| 1117 } | 1117 } |
| 1118 } | 1118 } |
| 1119 | 1119 |
| 1120 ~EventDispatcher() { | 1120 ~EventDispatcher() { |
| 1121 if (hev_ != NULL) { | 1121 if (hev_ != nullptr) { |
| 1122 ss_->Remove(this); | 1122 ss_->Remove(this); |
| 1123 WSACloseEvent(hev_); | 1123 WSACloseEvent(hev_); |
| 1124 hev_ = NULL; | 1124 hev_ = nullptr; |
| 1125 } | 1125 } |
| 1126 } | 1126 } |
| 1127 | 1127 |
| 1128 virtual void Signal() { | 1128 virtual void Signal() { |
| 1129 if (hev_ != NULL) | 1129 if (hev_ != nullptr) |
| 1130 WSASetEvent(hev_); | 1130 WSASetEvent(hev_); |
| 1131 } | 1131 } |
| 1132 | 1132 |
| 1133 virtual uint32_t GetRequestedEvents() { return 0; } | 1133 virtual uint32_t GetRequestedEvents() { return 0; } |
| 1134 | 1134 |
| 1135 virtual void OnPreEvent(uint32_t ff) { WSAResetEvent(hev_); } | 1135 virtual void OnPreEvent(uint32_t ff) { WSAResetEvent(hev_); } |
| 1136 | 1136 |
| 1137 virtual void OnEvent(uint32_t ff, int err) {} | 1137 virtual void OnEvent(uint32_t ff, int err) {} |
| 1138 | 1138 |
| 1139 virtual WSAEVENT GetWSAEvent() { | 1139 virtual WSAEVENT GetWSAEvent() { |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1261 if (index < **it) { | 1261 if (index < **it) { |
| 1262 --**it; | 1262 --**it; |
| 1263 } | 1263 } |
| 1264 } | 1264 } |
| 1265 } | 1265 } |
| 1266 | 1266 |
| 1267 #if defined(WEBRTC_POSIX) | 1267 #if defined(WEBRTC_POSIX) |
| 1268 bool PhysicalSocketServer::Wait(int cmsWait, bool process_io) { | 1268 bool PhysicalSocketServer::Wait(int cmsWait, bool process_io) { |
| 1269 // Calculate timing information | 1269 // Calculate timing information |
| 1270 | 1270 |
| 1271 struct timeval *ptvWait = NULL; | 1271 struct timeval* ptvWait = nullptr; |
| 1272 struct timeval tvWait; | 1272 struct timeval tvWait; |
| 1273 struct timeval tvStop; | 1273 struct timeval tvStop; |
| 1274 if (cmsWait != kForever) { | 1274 if (cmsWait != kForever) { |
| 1275 // Calculate wait timeval | 1275 // Calculate wait timeval |
| 1276 tvWait.tv_sec = cmsWait / 1000; | 1276 tvWait.tv_sec = cmsWait / 1000; |
| 1277 tvWait.tv_usec = (cmsWait % 1000) * 1000; | 1277 tvWait.tv_usec = (cmsWait % 1000) * 1000; |
| 1278 ptvWait = &tvWait; | 1278 ptvWait = &tvWait; |
| 1279 | 1279 |
| 1280 // Calculate when to return in a timeval | 1280 // Calculate when to return in a timeval |
| 1281 gettimeofday(&tvStop, NULL); | 1281 gettimeofday(&tvStop, nullptr); |
| 1282 tvStop.tv_sec += tvWait.tv_sec; | 1282 tvStop.tv_sec += tvWait.tv_sec; |
| 1283 tvStop.tv_usec += tvWait.tv_usec; | 1283 tvStop.tv_usec += tvWait.tv_usec; |
| 1284 if (tvStop.tv_usec >= 1000000) { | 1284 if (tvStop.tv_usec >= 1000000) { |
| 1285 tvStop.tv_usec -= 1000000; | 1285 tvStop.tv_usec -= 1000000; |
| 1286 tvStop.tv_sec += 1; | 1286 tvStop.tv_sec += 1; |
| 1287 } | 1287 } |
| 1288 } | 1288 } |
| 1289 | 1289 |
| 1290 // Zero all fd_sets. Don't need to do this inside the loop since | 1290 // Zero all fd_sets. Don't need to do this inside the loop since |
| 1291 // select() zeros the descriptors not signaled | 1291 // select() zeros the descriptors not signaled |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1323 FD_SET(fd, &fdsRead); | 1323 FD_SET(fd, &fdsRead); |
| 1324 if (ff & (DE_WRITE | DE_CONNECT)) | 1324 if (ff & (DE_WRITE | DE_CONNECT)) |
| 1325 FD_SET(fd, &fdsWrite); | 1325 FD_SET(fd, &fdsWrite); |
| 1326 } | 1326 } |
| 1327 } | 1327 } |
| 1328 | 1328 |
| 1329 // Wait then call handlers as appropriate | 1329 // Wait then call handlers as appropriate |
| 1330 // < 0 means error | 1330 // < 0 means error |
| 1331 // 0 means timeout | 1331 // 0 means timeout |
| 1332 // > 0 means count of descriptors ready | 1332 // > 0 means count of descriptors ready |
| 1333 int n = select(fdmax + 1, &fdsRead, &fdsWrite, NULL, ptvWait); | 1333 int n = select(fdmax + 1, &fdsRead, &fdsWrite, nullptr, ptvWait); |
| 1334 | 1334 |
| 1335 // If error, return error. | 1335 // If error, return error. |
| 1336 if (n < 0) { | 1336 if (n < 0) { |
| 1337 if (errno != EINTR) { | 1337 if (errno != EINTR) { |
| 1338 LOG_E(LS_ERROR, EN, errno) << "select"; | 1338 LOG_E(LS_ERROR, EN, errno) << "select"; |
| 1339 return false; | 1339 return false; |
| 1340 } | 1340 } |
| 1341 // Else ignore the error and keep going. If this EINTR was for one of the | 1341 // Else ignore the error and keep going. If this EINTR was for one of the |
| 1342 // signals managed by this PhysicalSocketServer, the | 1342 // signals managed by this PhysicalSocketServer, the |
| 1343 // PosixSignalDeliveryDispatcher will be in the signaled state in the next | 1343 // PosixSignalDeliveryDispatcher will be in the signaled state in the next |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1398 } | 1398 } |
| 1399 } | 1399 } |
| 1400 } | 1400 } |
| 1401 | 1401 |
| 1402 // Recalc the time remaining to wait. Doing it here means it doesn't get | 1402 // Recalc the time remaining to wait. Doing it here means it doesn't get |
| 1403 // calced twice the first time through the loop | 1403 // calced twice the first time through the loop |
| 1404 if (ptvWait) { | 1404 if (ptvWait) { |
| 1405 ptvWait->tv_sec = 0; | 1405 ptvWait->tv_sec = 0; |
| 1406 ptvWait->tv_usec = 0; | 1406 ptvWait->tv_usec = 0; |
| 1407 struct timeval tvT; | 1407 struct timeval tvT; |
| 1408 gettimeofday(&tvT, NULL); | 1408 gettimeofday(&tvT, nullptr); |
| 1409 if ((tvStop.tv_sec > tvT.tv_sec) | 1409 if ((tvStop.tv_sec > tvT.tv_sec) |
| 1410 || ((tvStop.tv_sec == tvT.tv_sec) | 1410 || ((tvStop.tv_sec == tvT.tv_sec) |
| 1411 && (tvStop.tv_usec > tvT.tv_usec))) { | 1411 && (tvStop.tv_usec > tvT.tv_usec))) { |
| 1412 ptvWait->tv_sec = tvStop.tv_sec - tvT.tv_sec; | 1412 ptvWait->tv_sec = tvStop.tv_sec - tvT.tv_sec; |
| 1413 ptvWait->tv_usec = tvStop.tv_usec - tvT.tv_usec; | 1413 ptvWait->tv_usec = tvStop.tv_usec - tvT.tv_usec; |
| 1414 if (ptvWait->tv_usec < 0) { | 1414 if (ptvWait->tv_usec < 0) { |
| 1415 RTC_DCHECK(ptvWait->tv_sec > 0); | 1415 RTC_DCHECK(ptvWait->tv_sec > 0); |
| 1416 ptvWait->tv_usec += 1000000; | 1416 ptvWait->tv_usec += 1000000; |
| 1417 ptvWait->tv_sec -= 1; | 1417 ptvWait->tv_sec -= 1; |
| 1418 } | 1418 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1466 } | 1466 } |
| 1467 act.sa_handler = handler; | 1467 act.sa_handler = handler; |
| 1468 #if !defined(__native_client__) | 1468 #if !defined(__native_client__) |
| 1469 // Use SA_RESTART so that our syscalls don't get EINTR, since we don't need it | 1469 // Use SA_RESTART so that our syscalls don't get EINTR, since we don't need it |
| 1470 // and it's a nuisance. Though some syscalls still return EINTR and there's no | 1470 // and it's a nuisance. Though some syscalls still return EINTR and there's no |
| 1471 // real standard for which ones. :( | 1471 // real standard for which ones. :( |
| 1472 act.sa_flags = SA_RESTART; | 1472 act.sa_flags = SA_RESTART; |
| 1473 #else | 1473 #else |
| 1474 act.sa_flags = 0; | 1474 act.sa_flags = 0; |
| 1475 #endif | 1475 #endif |
| 1476 if (sigaction(signum, &act, NULL) != 0) { | 1476 if (sigaction(signum, &act, nullptr) != 0) { |
| 1477 LOG_ERR(LS_ERROR) << "Couldn't set sigaction"; | 1477 LOG_ERR(LS_ERROR) << "Couldn't set sigaction"; |
| 1478 return false; | 1478 return false; |
| 1479 } | 1479 } |
| 1480 return true; | 1480 return true; |
| 1481 } | 1481 } |
| 1482 #endif // WEBRTC_POSIX | 1482 #endif // WEBRTC_POSIX |
| 1483 | 1483 |
| 1484 #if defined(WEBRTC_WIN) | 1484 #if defined(WEBRTC_WIN) |
| 1485 bool PhysicalSocketServer::Wait(int cmsWait, bool process_io) { | 1485 bool PhysicalSocketServer::Wait(int cmsWait, bool process_io) { |
| 1486 int64_t cmsTotal = cmsWait; | 1486 int64_t cmsTotal = cmsWait; |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1637 break; | 1637 break; |
| 1638 } | 1638 } |
| 1639 } | 1639 } |
| 1640 | 1640 |
| 1641 // Done | 1641 // Done |
| 1642 return true; | 1642 return true; |
| 1643 } | 1643 } |
| 1644 #endif // WEBRTC_WIN | 1644 #endif // WEBRTC_WIN |
| 1645 | 1645 |
| 1646 } // namespace rtc | 1646 } // namespace rtc |
| OLD | NEW |