| Index: base/win/scoped_handle.h
 | 
| diff --git a/base/win/scoped_handle.h b/base/win/scoped_handle.h
 | 
| index 97fd7a5c79a5884b7c9ce6852987bdac959f0ac8..d1eb1d688aeb5410c0cdf34ca45026f7fbd3a202 100644
 | 
| --- a/base/win/scoped_handle.h
 | 
| +++ b/base/win/scoped_handle.h
 | 
| @@ -27,9 +27,13 @@ namespace win {
 | 
|  
 | 
|  // Generic wrapper for raw handles that takes care of closing handles
 | 
|  // automatically. The class interface follows the style of
 | 
| -// the ScopedFILE class with one addition:
 | 
| +// the ScopedFILE class with two additions:
 | 
|  //   - IsValid() method can tolerate multiple invalid handle values such as NULL
 | 
|  //     and INVALID_HANDLE_VALUE (-1) for Win32 handles.
 | 
| +//   - Set() (and the constructors and assignment operators that call it)
 | 
| +//     preserve the Windows LastError code. This ensures that GetLastError() can
 | 
| +//     be called after stashing a handle in a GenericScopedHandle object. Doing
 | 
| +//     this explicitly is necessary because of bug 528394 and VC++ 2015.
 | 
|  template <class Traits, class Verifier>
 | 
|  class GenericScopedHandle {
 | 
|    MOVE_ONLY_TYPE_FOR_CPP_03(GenericScopedHandle, RValue)
 | 
| @@ -66,6 +70,8 @@ class GenericScopedHandle {
 | 
|  
 | 
|    void Set(Handle handle) {
 | 
|      if (handle_ != handle) {
 | 
| +      // Preserve old LastError to avoid bug 528394.
 | 
| +      auto last_error = ::GetLastError();
 | 
|        Close();
 | 
|  
 | 
|        if (Traits::IsHandleValid(handle)) {
 | 
| @@ -73,6 +79,7 @@ class GenericScopedHandle {
 | 
|          Verifier::StartTracking(handle, this, BASE_WIN_GET_CALLER,
 | 
|                                  tracked_objects::GetProgramCounter());
 | 
|        }
 | 
| +      ::SetLastError(last_error);
 | 
|      }
 | 
|    }
 | 
|  
 | 
| 
 |