]> granicus.if.org Git - php/commitdiff
improve/fix error handling
authorAnatol Belski <ab@php.net>
Sat, 15 Apr 2017 17:30:30 +0000 (19:30 +0200)
committerAnatol Belski <ab@php.net>
Sat, 15 Apr 2017 17:32:04 +0000 (19:32 +0200)
GetLastError() should not be called, if the function didn't fail.

ext/opcache/shared_alloc_win32.c

index d05f01cd2b274fbebbf44a1e1cc06580f4dda553..2701b41739514df230edf5316daf951d98804035 100644 (file)
@@ -134,8 +134,8 @@ static int zend_shared_alloc_reattach(size_t requested_size, char **error_in)
        FILE *fp = fopen(mmap_base_file, "r");
        MEMORY_BASIC_INFORMATION info;
 
-       err = GetLastError();
        if (!fp) {
+               err = GetLastError();
                zend_win_error_message(ACCEL_LOG_WARNING, mmap_base_file, err);
                zend_win_error_message(ACCEL_LOG_FATAL, "Unable to open base address file", err);
                *error_in="fopen";
@@ -184,9 +184,9 @@ static int zend_shared_alloc_reattach(size_t requested_size, char **error_in)
        }
 
        mapping_base = MapViewOfFileEx(memfile, FILE_MAP_ALL_ACCESS, 0, 0, 0, wanted_mapping_base);
-       err = GetLastError();
 
        if (mapping_base == NULL) {
+               err = GetLastError();
                if (err == ERROR_INVALID_ADDRESS) {
                        zend_win_error_message(ACCEL_LOG_FATAL, "Unable to reattach to base address", err);
                        return ALLOC_FAILURE;
@@ -200,7 +200,7 @@ static int zend_shared_alloc_reattach(size_t requested_size, char **error_in)
 
 static int create_segments(size_t requested_size, zend_shared_segment ***shared_segments_p, int *shared_segments_count, char **error_in)
 {
-       int err, ret;
+       int err = 0, ret;
        zend_shared_segment *shared_segment;
        int map_retries = 0;
        void *default_mapping_base_set[] = { 0, 0 };
@@ -222,14 +222,14 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
           and we have to sleep some time (until the child releases the mapping object) and retry.*/
        do {
                memfile = OpenFileMapping(FILE_MAP_WRITE, 0, create_name_with_username(ACCEL_FILEMAP_NAME));
-               err = GetLastError();
                if (memfile == NULL) {
+                       err = GetLastError();
                        break;
                }
 
                ret =  zend_shared_alloc_reattach(requested_size, error_in);
-               err = GetLastError();
                if (ret == ALLOC_FAIL_MAPPING) {
+                       err = GetLastError();
                        /* Mapping failed, wait for mapping object to get freed and retry */
                        CloseHandle(memfile);
                        memfile = NULL;
@@ -256,8 +256,9 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
        *shared_segments_count = 1;
        *shared_segments_p = (zend_shared_segment **) calloc(1, sizeof(zend_shared_segment)+sizeof(void *));
        if (!*shared_segments_p) {
+               err = GetLastError();
                zend_shared_alloc_unlock_win32();
-               zend_win_error_message(ACCEL_LOG_FATAL, "calloc() failed", GetLastError());
+               zend_win_error_message(ACCEL_LOG_FATAL, "calloc() failed", err);
                *error_in = "calloc";
                return ALLOC_FAILURE;
        }
@@ -266,8 +267,8 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
 
        memfile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, requested_size,
                                                                create_name_with_username(ACCEL_FILEMAP_NAME));
-       err = GetLastError();
        if (memfile == NULL) {
+               err = GetLastError();
                zend_shared_alloc_unlock_win32();
                zend_win_error_message(ACCEL_LOG_FATAL, "Unable to create file mapping", err);
                *error_in = "CreateFileMapping";
@@ -301,8 +302,8 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
                wanted_mapping_base++;
        } while (!mapping_base);
 
-       err = GetLastError();
        if (mapping_base == NULL) {
+               err = GetLastError();
                zend_shared_alloc_unlock_win32();
                zend_win_error_message(ACCEL_LOG_FATAL, "Unable to create view for file mapping", err);
                *error_in = "MapViewOfFile";
@@ -310,8 +311,8 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
        } else {
                char *mmap_base_file = get_mmap_base_file();
                FILE *fp = fopen(mmap_base_file, "w");
-               err = GetLastError();
                if (!fp) {
+                       err = GetLastError();
                        zend_shared_alloc_unlock_win32();
                        zend_win_error_message(ACCEL_LOG_WARNING, mmap_base_file, err);
                        zend_win_error_message(ACCEL_LOG_FATAL, "Unable to write base address", err);