Explorar o código

be more conservative when saving os error numbers

David Rose %!s(int64=22) %!d(string=hai) anos
pai
achega
a3f8c0fb5d
Modificáronse 1 ficheiros con 11 adicións e 2 borrados
  1. 11 2
      panda/src/downloader/bioStreamBuf.cxx

+ 11 - 2
panda/src/downloader/bioStreamBuf.cxx

@@ -157,6 +157,15 @@ underflow() {
     if (read_count != (int)num_bytes) {
     if (read_count != (int)num_bytes) {
       // Oops, we didn't read what we thought we would.
       // Oops, we didn't read what we thought we would.
       if (read_count <= 0) {
       if (read_count <= 0) {
+        // Immediately save the os error in case we screw up and do
+        // something that will change its value before we can output
+        // it.
+#ifdef WIN32_VC
+        int os_error = WSAGetLastError();
+#else
+        int os_error = errno;
+#endif  // WIN32_VC
+
         _is_closed = !BIO_should_retry(*_source);
         _is_closed = !BIO_should_retry(*_source);
         if (_is_closed) {
         if (_is_closed) {
           downloader_cat.info()
           downloader_cat.info()
@@ -175,10 +184,10 @@ underflow() {
 
 
 #ifdef WIN32_VC
 #ifdef WIN32_VC
           downloader_cat.warning()
           downloader_cat.warning()
-            << "Windows error code: " << WSAGetLastError() << "\n";
+            << "Windows error code: " << os_error << "\n";
 #else
 #else
           downloader_cat.warning()
           downloader_cat.warning()
-            << "Unix error code: " << errno << "\n";
+            << "Unix error code: " << os_error << "\n";
 #endif  // WIN32_VC
 #endif  // WIN32_VC
         }
         }
         gbump(num_bytes);
         gbump(num_bytes);