Commit 0719d4070417266dea2573f6cf559beff16c62b7

Con Kolivas 2012-01-22T17:09:06

Clean up on failure to load a binary kernel.

diff --git a/ocl.c b/ocl.c
index 682c3f3..7ea48a6 100644
--- a/ocl.c
+++ b/ocl.c
@@ -424,6 +424,9 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
 			fclose(binaryfile);
 			goto build;
 		}
+		if (!binary_stat.st_size)
+			goto build;
+
 		binary_sizes[gpu] = binary_stat.st_size;
 		binaries[gpu] = (char *)malloc(binary_sizes[gpu]);
 		if (unlikely(!binaries[gpu])) {
@@ -435,6 +438,7 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
 		if (fread(binaries[gpu], 1, binary_sizes[gpu], binaryfile) != binary_sizes[gpu]) {
 			applog(LOG_ERR, "Unable to fread binaries[gpu]");
 			fclose(binaryfile);
+			free(binaries[gpu]);
 			goto build;
 		}
 
@@ -442,6 +446,7 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
 		if (status != CL_SUCCESS) {
 			applog(LOG_ERR, "Error: Loading Binary into cl_program (clCreateProgramWithBinary)");
 			fclose(binaryfile);
+			free(binaries[gpu]);
 			goto build;
 		}
 		fclose(binaryfile);