copybit_c2d.cpp: Return the correct status in open_copybit()
The patch sets the status as COPYBIT_FAILURE in case of an error in open_copybit() as it needs to return the correct status. It also sets the copybit device handle as NULL. Change-Id: I3c35d163049763427ad92030cb1d88d72f7680fb
This commit is contained in:
parent
dac6f95b56
commit
d739bf81ce
@ -901,7 +901,6 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
ctx->libc2d2 = ::dlopen("libC2D2.so", RTLD_NOW);
|
||||
if (!ctx->libc2d2) {
|
||||
LOGE("FATAL ERROR: could not dlopen libc2d2.so: %s", dlerror());
|
||||
status = COPYBIT_FAILURE;
|
||||
goto error;
|
||||
}
|
||||
*(void **)&LINK_c2dCreateSurface = ::dlsym(ctx->libc2d2,
|
||||
@ -922,7 +921,6 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
|| !LINK_c2dDraw || !LINK_c2dFlush || !LINK_c2dWaitTimestamp || !LINK_c2dFinish
|
||||
|| !LINK_c2dDestroySurface) {
|
||||
LOGE("%s: dlsym ERROR", __func__);
|
||||
status = COPYBIT_FAILURE;
|
||||
goto error1;
|
||||
}
|
||||
|
||||
@ -939,7 +937,6 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
ctx->g12_device_fd = open(G12_DEVICE_NAME, O_RDWR | O_SYNC);
|
||||
if(ctx->g12_device_fd < 0) {
|
||||
LOGE("%s: g12_device_fd open failed", __func__);
|
||||
status = COPYBIT_FAILURE;
|
||||
goto error1;
|
||||
}
|
||||
|
||||
@ -955,7 +952,6 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
(C2D_SURFACE_TYPE)(C2D_SURFACE_RGB_HOST |
|
||||
C2D_SURFACE_WITH_PHYS), &surfDefinition)) {
|
||||
LOGE("%s: create ctx->dst failed", __func__);
|
||||
status = COPYBIT_FAILURE;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
@ -963,7 +959,6 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
(C2D_SURFACE_TYPE)(C2D_SURFACE_RGB_HOST |
|
||||
C2D_SURFACE_WITH_PHYS), &surfDefinition)) {
|
||||
LOGE("%s: create ctx->src[RGB_SURFACE] failed", __func__);
|
||||
status = COPYBIT_FAILURE;
|
||||
goto error3;
|
||||
}
|
||||
|
||||
@ -984,16 +979,10 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
(C2D_SURFACE_TYPE)(C2D_SURFACE_YUV_HOST | C2D_SURFACE_WITH_PHYS),
|
||||
&yuvSurfaceDef)) {
|
||||
LOGE("%s: create ctx->src[YUV_SURFACE] failed", __func__);
|
||||
status = COPYBIT_FAILURE;
|
||||
goto error4;
|
||||
}
|
||||
|
||||
if (status == COPYBIT_SUCCESS)
|
||||
*device = &ctx->device.common;
|
||||
else {
|
||||
close_copybit(&ctx->device.common);
|
||||
goto error4;
|
||||
}
|
||||
*device = &ctx->device.common;
|
||||
|
||||
while ((fd==-1) && device_template[i]) {
|
||||
snprintf(fbName, 64, device_template[i], 0);
|
||||
@ -1001,11 +990,11 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
i++;
|
||||
}
|
||||
if (fd < 0)
|
||||
goto error4;
|
||||
goto error5;
|
||||
|
||||
struct fb_var_screeninfo info;
|
||||
if (ioctl(fd, FBIOGET_VSCREENINFO, &info) == -1)
|
||||
goto error5;
|
||||
goto error6;
|
||||
|
||||
ctx->fb_width = info.xres;
|
||||
ctx->fb_height = info.yres;
|
||||
@ -1013,9 +1002,11 @@ static int open_copybit(const struct hw_module_t* module, const char* name,
|
||||
ctx->isPremultipliedAlpha = false;
|
||||
return status;
|
||||
|
||||
error5:
|
||||
error6:
|
||||
close(fd);
|
||||
fd = -1;
|
||||
error5:
|
||||
LINK_c2dDestroySurface(ctx->src[YUV_SURFACE]);
|
||||
error4:
|
||||
LINK_c2dDestroySurface(ctx->src[RGB_SURFACE]);
|
||||
error3:
|
||||
@ -1026,6 +1017,8 @@ error1:
|
||||
::dlclose(ctx->libc2d2);
|
||||
error:
|
||||
free(ctx);
|
||||
status = COPYBIT_FAILURE;
|
||||
*device = NULL;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user