com php-src: improve/fix error handling: ext/opcache/shared_a lloc_win32.c

[email protected] (Anatol Belski)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    ca543ff01c9e182eadc344aec8746ba19187a2b1
Author:    Anatol Belski <[email protected]>         Sat, 15 Apr 2017 19:30:30 +0200
Parents:   9719621e078e41aa2d387cea4d4b1dd956c9e1e2
Branches:  PHP-7.0 PHP-7.1 master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=ca543ff01c9e182eadc344aec8746ba19187a2b1

Log:
improve/fix error handling

GetLastError() should not be called, if the function didn't fail.

Changed paths:
  M  ext/opcache/shared_alloc_win32.c


Diff:
diff --git a/ext/opcache/shared_alloc_win32.c b/ext/opcache/shared_alloc_win32.c
index d05f01c..2701b41 100644
--- a/ext/opcache/shared_alloc_win32.c
+++ b/ext/opcache/shared_alloc_win32.c
@@ -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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.