[Title] Fixed the context creation code to eliminate prevent issue
authorHaegeun Park <haegeun.park@samsung.com>
Fri, 13 Sep 2013 08:12:00 +0000 (01:12 -0700)
committerHaegeun Park <haegeun.park@samsung.com>
Fri, 13 Sep 2013 08:12:00 +0000 (01:12 -0700)
[Issue#]
[Problem]
[Cause] Reported a memory leak when occured fatal case (no memory)
[Solution]
- Modified logic

include/EGL/def_egl.h [deleted file]
include/EGL/sym_egl.h [deleted file]
src/modules/fastpath/coregl_fastpath_egl.c

diff --git a/include/EGL/def_egl.h b/include/EGL/def_egl.h
deleted file mode 100644 (file)
index 6236e08..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-//------------------------------------------------------//
-//                         EGL
-//------------------------------------------------------//
-
-/* EGL Types */
-/* EGLint is defined in eglplatform.h */
-
-typedef unsigned int EGLBoolean;
-typedef unsigned int EGLenum;
-typedef void *EGLConfig;
-typedef void *EGLContext;
-typedef void *EGLDisplay;
-typedef void *EGLSurface;
-typedef void *EGLClientBuffer;
-
-/* EGL Versioning */
-#define EGL_VERSION_1_0                        1
-#define EGL_VERSION_1_1                        1
-#define EGL_VERSION_1_2                        1
-#define EGL_VERSION_1_3                        1
-#define EGL_VERSION_1_4                        1
-
-/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
- * enums are assigned unique values starting at 0x3000.
- */
-
-/* EGL aliases */
-#define EGL_FALSE                      0
-#define EGL_TRUE                       1
-
-/* Out-of-band handle values */
-#define EGL_DEFAULT_DISPLAY            ((EGLNativeDisplayType)0)
-#define EGL_NO_CONTEXT                 ((EGLContext)0)
-#define EGL_NO_DISPLAY                 ((EGLDisplay)0)
-#define EGL_NO_SURFACE                 ((EGLSurface)0)
-
-/* Out-of-band attribute value */
-#define EGL_DONT_CARE                  ((EGLint)-1)
-
-/* Errors / GetError return values */
-#define EGL_SUCCESS                    0x3000
-#define EGL_NOT_INITIALIZED            0x3001
-#define EGL_BAD_ACCESS                 0x3002
-#define EGL_BAD_ALLOC                  0x3003
-#define EGL_BAD_ATTRIBUTE              0x3004
-#define EGL_BAD_CONFIG                 0x3005
-#define EGL_BAD_CONTEXT                        0x3006
-#define EGL_BAD_CURRENT_SURFACE                0x3007
-#define EGL_BAD_DISPLAY                        0x3008
-#define EGL_BAD_MATCH                  0x3009
-#define EGL_BAD_NATIVE_PIXMAP          0x300A
-#define EGL_BAD_NATIVE_WINDOW          0x300B
-#define EGL_BAD_PARAMETER              0x300C
-#define EGL_BAD_SURFACE                        0x300D
-#define EGL_CONTEXT_LOST               0x300E  /* EGL 1.1 - IMG_power_management */
-
-/* Reserved 0x300F-0x301F for additional errors */
-
-/* Config attributes */
-#define EGL_BUFFER_SIZE                        0x3020
-#define EGL_ALPHA_SIZE                 0x3021
-#define EGL_BLUE_SIZE                  0x3022
-#define EGL_GREEN_SIZE                 0x3023
-#define EGL_RED_SIZE                   0x3024
-#define EGL_DEPTH_SIZE                 0x3025
-#define EGL_STENCIL_SIZE               0x3026
-#define EGL_CONFIG_CAVEAT              0x3027
-#define EGL_CONFIG_ID                  0x3028
-#define EGL_LEVEL                      0x3029
-#define EGL_MAX_PBUFFER_HEIGHT         0x302A
-#define EGL_MAX_PBUFFER_PIXELS         0x302B
-#define EGL_MAX_PBUFFER_WIDTH          0x302C
-#define EGL_NATIVE_RENDERABLE          0x302D
-#define EGL_NATIVE_VISUAL_ID           0x302E
-#define EGL_NATIVE_VISUAL_TYPE         0x302F
-#define EGL_PRESERVED_RESOURCES                0x3030
-#define EGL_SAMPLES                    0x3031
-#define EGL_SAMPLE_BUFFERS             0x3032
-#define EGL_SURFACE_TYPE               0x3033
-#define EGL_TRANSPARENT_TYPE           0x3034
-#define EGL_TRANSPARENT_BLUE_VALUE     0x3035
-#define EGL_TRANSPARENT_GREEN_VALUE    0x3036
-#define EGL_TRANSPARENT_RED_VALUE      0x3037
-#define EGL_NONE                       0x3038  /* Attrib list terminator */
-#define EGL_BIND_TO_TEXTURE_RGB                0x3039
-#define EGL_BIND_TO_TEXTURE_RGBA       0x303A
-#define EGL_MIN_SWAP_INTERVAL          0x303B
-#define EGL_MAX_SWAP_INTERVAL          0x303C
-#define EGL_LUMINANCE_SIZE             0x303D
-#define EGL_ALPHA_MASK_SIZE            0x303E
-#define EGL_COLOR_BUFFER_TYPE          0x303F
-#define EGL_RENDERABLE_TYPE            0x3040
-#define EGL_MATCH_NATIVE_PIXMAP                0x3041  /* Pseudo-attribute (not queryable) */
-#define EGL_CONFORMANT                 0x3042
-
-/* Reserved 0x3041-0x304F for additional config attributes */
-
-/* Config attribute values */
-#define EGL_SLOW_CONFIG                        0x3050  /* EGL_CONFIG_CAVEAT value */
-#define EGL_NON_CONFORMANT_CONFIG      0x3051  /* EGL_CONFIG_CAVEAT value */
-#define EGL_TRANSPARENT_RGB            0x3052  /* EGL_TRANSPARENT_TYPE value */
-#define EGL_RGB_BUFFER                 0x308E  /* EGL_COLOR_BUFFER_TYPE value */
-#define EGL_LUMINANCE_BUFFER           0x308F  /* EGL_COLOR_BUFFER_TYPE value */
-
-/* More config attribute values, for EGL_TEXTURE_FORMAT */
-#define EGL_NO_TEXTURE                 0x305C
-#define EGL_TEXTURE_RGB                        0x305D
-#define EGL_TEXTURE_RGBA               0x305E
-#define EGL_TEXTURE_2D                 0x305F
-
-/* Config attribute mask bits */
-#define EGL_PBUFFER_BIT                        0x0001  /* EGL_SURFACE_TYPE mask bits */
-#define EGL_PIXMAP_BIT                 0x0002  /* EGL_SURFACE_TYPE mask bits */
-#define EGL_WINDOW_BIT                 0x0004  /* EGL_SURFACE_TYPE mask bits */
-#define EGL_VG_COLORSPACE_LINEAR_BIT   0x0020  /* EGL_SURFACE_TYPE mask bits */
-#define EGL_VG_ALPHA_FORMAT_PRE_BIT    0x0040  /* EGL_SURFACE_TYPE mask bits */
-#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 /* EGL_SURFACE_TYPE mask bits */
-
-#define EGL_OPENGL_ES_BIT              0x0001  /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENVG_BIT                 0x0002  /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENGL_ES2_BIT             0x0004  /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENGL_BIT                 0x0008  /* EGL_RENDERABLE_TYPE mask bits */
-
-/* QueryString targets */
-#define EGL_VENDOR                     0x3053
-#define EGL_VERSION                    0x3054
-#define EGL_EXTENSIONS                 0x3055
-#define EGL_CLIENT_APIS                        0x308D
-
-/* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */
-#define EGL_HEIGHT                     0x3056
-#define EGL_WIDTH                      0x3057
-#define EGL_LARGEST_PBUFFER            0x3058
-#define EGL_TEXTURE_FORMAT             0x3080
-#define EGL_TEXTURE_TARGET             0x3081
-#define EGL_MIPMAP_TEXTURE             0x3082
-#define EGL_MIPMAP_LEVEL               0x3083
-#define EGL_RENDER_BUFFER              0x3086
-#define EGL_VG_COLORSPACE              0x3087
-#define EGL_VG_ALPHA_FORMAT            0x3088
-#define EGL_HORIZONTAL_RESOLUTION      0x3090
-#define EGL_VERTICAL_RESOLUTION                0x3091
-#define EGL_PIXEL_ASPECT_RATIO         0x3092
-#define EGL_SWAP_BEHAVIOR              0x3093
-#define EGL_MULTISAMPLE_RESOLVE                0x3099
-
-/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
-#define EGL_BACK_BUFFER                        0x3084
-#define EGL_SINGLE_BUFFER              0x3085
-
-/* OpenVG color spaces */
-#define EGL_VG_COLORSPACE_sRGB         0x3089  /* EGL_VG_COLORSPACE value */
-#define EGL_VG_COLORSPACE_LINEAR       0x308A  /* EGL_VG_COLORSPACE value */
-
-/* OpenVG alpha formats */
-#define EGL_VG_ALPHA_FORMAT_NONPRE     0x308B  /* EGL_ALPHA_FORMAT value */
-#define EGL_VG_ALPHA_FORMAT_PRE                0x308C  /* EGL_ALPHA_FORMAT value */
-
-/* Constant scale factor by which fractional display resolutions &
- * aspect ratio are scaled when queried as integer values.
- */
-#define EGL_DISPLAY_SCALING            10000
-
-/* Unknown display resolution/aspect ratio */
-#define EGL_UNKNOWN                    ((EGLint)-1)
-
-/* Back buffer swap behaviors */
-#define EGL_BUFFER_PRESERVED           0x3094  /* EGL_SWAP_BEHAVIOR value */
-#define EGL_BUFFER_DESTROYED           0x3095  /* EGL_SWAP_BEHAVIOR value */
-
-/* CreatePbufferFromClientBuffer buffer types */
-#define EGL_OPENVG_IMAGE               0x3096
-
-/* QueryContext targets */
-#define EGL_CONTEXT_CLIENT_TYPE                0x3097
-
-/* CreateContext attributes */
-#define EGL_CONTEXT_CLIENT_VERSION     0x3098
-
-/* Multisample resolution behaviors */
-#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A /* EGL_MULTISAMPLE_RESOLVE value */
-#define EGL_MULTISAMPLE_RESOLVE_BOX    0x309B  /* EGL_MULTISAMPLE_RESOLVE value */
-
-/* BindAPI/QueryAPI targets */
-#define EGL_OPENGL_ES_API              0x30A0
-#define EGL_OPENVG_API                 0x30A1
-#define EGL_OPENGL_API                 0x30A2
-
-/* GetCurrentSurface targets */
-#define EGL_DRAW                       0x3059
-#define EGL_READ                       0x305A
-
-/* WaitNative engines */
-#define EGL_CORE_NATIVE_ENGINE         0x305B
-
-/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
-#define EGL_COLORSPACE                 EGL_VG_COLORSPACE
-#define EGL_ALPHA_FORMAT               EGL_VG_ALPHA_FORMAT
-#define EGL_COLORSPACE_sRGB            EGL_VG_COLORSPACE_sRGB
-#define EGL_COLORSPACE_LINEAR          EGL_VG_COLORSPACE_LINEAR
-#define EGL_ALPHA_FORMAT_NONPRE                EGL_VG_ALPHA_FORMAT_NONPRE
-#define EGL_ALPHA_FORMAT_PRE           EGL_VG_ALPHA_FORMAT_PRE
-
-// KHR Extention
-#ifndef EGL_KHR_image
-#define EGL_KHR_image 1
-#define EGL_NATIVE_PIXMAP_KHR                  0x30B0  /* eglCreateImageKHR target */
-typedef void *EGLImageKHR;
-#define EGL_NO_IMAGE_KHR                       ((EGLImageKHR)0)
-#endif
-
diff --git a/include/EGL/sym_egl.h b/include/EGL/sym_egl.h
deleted file mode 100644 (file)
index c8d375f..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-// Defult use-case for exporting symbols
-#ifndef _COREGL_SYMBOL
-#define _COREGL_SYMBOL_NOT_DEFINED
-#define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)     COREGL_API extern RET_TYPE FUNC_NAME PARAM_LIST;
-#endif
-#ifndef _COREGL_EXT_SYMBOL
-#define _COREGL_EXT_SYMBOL_NOT_DEFINED
-#define _COREGL_EXT_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)   _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)
-#endif
-#ifndef _COREGL_EXT_SYMBOL_ALIAS
-#define _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
-#define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME)
-#endif
-#ifndef _COREGL_EXT_SYMBOL_FASTPATH_PASS
-#define _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
-#define _COREGL_EXT_SYMBOL_FASTPATH_PASS(FUNC_NAME)
-#endif
-#ifndef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
-#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
-#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK(FUNC_NAME)
-#endif
-
-// Standard EGL APIs
-
-_COREGL_SYMBOL(GL_FALSE, EGLint, eglGetError, (void))
-_COREGL_SYMBOL(GL_FALSE, EGLDisplay, eglGetDisplay, (EGLNativeDisplayType display_id))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglInitialize, (EGLDisplay dpy, EGLint* major, EGLint *minor))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglTerminate, (EGLDisplay dpy))
-_COREGL_SYMBOL(GL_FALSE, const char*, eglQueryString, (EGLDisplay dpy, EGLint name))
-
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglGetConfigs, (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglChooseConfig, (EGLDisplay dpy, const EGLint* attrib_list, EGLConfig* configs, EGLint config_size, EGLint* num_config))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglGetConfigAttrib, (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value))
-
-_COREGL_SYMBOL(GL_FALSE, EGLSurface, eglCreateWindowSurface, (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint* attrib_list))
-_COREGL_SYMBOL(GL_FALSE, EGLSurface, eglCreatePbufferSurface, (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list))
-_COREGL_SYMBOL(GL_FALSE, EGLSurface, eglCreatePixmapSurface, (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint* attrib_list))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglDestroySurface, (EGLDisplay dpy, EGLSurface surface))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglQuerySurface, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value))
-
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglBindAPI, (EGLenum api))
-_COREGL_SYMBOL(GL_FALSE, EGLenum, eglQueryAPI, (void))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglWaitClient, (void))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglReleaseThread, (void))
-_COREGL_SYMBOL(GL_FALSE, EGLSurface, eglCreatePbufferFromClientBuffer, (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list))
-
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglSurfaceAttrib, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglBindTexImage, (EGLDisplay dpy, EGLSurface surface, EGLint buffer))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglReleaseTexImage, (EGLDisplay dpy, EGLSurface surface, EGLint buffer))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglSwapInterval, (EGLDisplay dpy, EGLint interval))
-_COREGL_SYMBOL(GL_FALSE, EGLContext, eglCreateContext, (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint* attrib_list))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglDestroyContext, (EGLDisplay dpy, EGLContext ctx))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglMakeCurrent, (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx))
-_COREGL_SYMBOL(GL_FALSE, EGLContext, eglGetCurrentContext, (void))
-_COREGL_SYMBOL(GL_FALSE, EGLSurface, eglGetCurrentSurface, (EGLint readdraw))
-_COREGL_SYMBOL(GL_FALSE, EGLDisplay, eglGetCurrentDisplay, (void))
-
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglQueryContext, (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglWaitGL, (void))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglWaitNative, (EGLint engine))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglSwapBuffers, (EGLDisplay dpy, EGLSurface surface))
-_COREGL_SYMBOL(GL_FALSE, EGLBoolean, eglCopyBuffers, (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target))
-
-_COREGL_SYMBOL(GL_FALSE, _eng_fn, eglGetProcAddress, (const char* procname))
-
-
-// Extensions
-_COREGL_EXT_SYMBOL(GL_TRUE, EGLImageKHR, eglCreateImageKHR, (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list))
-_COREGL_EXT_SYMBOL_ALIAS(eglCreateImageKHR, eglCreateImage)
-_COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglDestroyImageKHR, (EGLDisplay dpy, EGLImageKHR image))
-_COREGL_EXT_SYMBOL_ALIAS(eglDestroyImageKHR, eglDestroyImage)
-
-_COREGL_EXT_SYMBOL(GL_TRUE, void*, eglMapImageSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint device_type, EGLint access_option))
-_COREGL_EXT_SYMBOL_ALIAS(eglMapImageSEC, eglMapImage)
-_COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnmapImageSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint device_type))
-_COREGL_EXT_SYMBOL_ALIAS(eglUnmapImageSEC, eglUnmapImage)
-_COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglGetImageAttribSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint attribute, EGLint *value))
-_COREGL_EXT_SYMBOL_ALIAS(eglGetImageAttribSEC, eglGetImageAttrib)
-
-_COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglLockSurfaceKHR, (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list))
-_COREGL_EXT_SYMBOL_ALIAS(eglLockSurfaceKHR, eglLockSurface)
-_COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnlockSurfaceKHR, (EGLDisplay display, EGLSurface surface))
-_COREGL_EXT_SYMBOL_ALIAS(eglUnlockSurfaceKHR, eglUnlockSurface)
-
-// Verified extensions
-_COREGL_EXT_SYMBOL_FASTPATH_PASS(eglSwapBuffersRegionEXT)
-_COREGL_EXT_SYMBOL_FASTPATH_PASS(eglSwapBuffersRegionSEC)
-_COREGL_EXT_SYMBOL_FASTPATH_PASS(eglSwapBuffersWithDamageEXT)
-
-// Blocked extensions
-//_COREGL_EXT_SYMBOL_FASTPATH_BLOCK()
-
-#ifdef _COREGL_EXT_SYMBOL_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL
-#endif
-
-#ifdef _COREGL_SYMBOL_NOT_DEFINED
-#undef _COREGL_SYMBOL_NOT_DEFINED
-#undef _COREGL_SYMBOL
-#endif
-
-#ifdef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL_ALIAS
-#endif
-
-#ifdef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS
-#endif
-
-#ifdef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
-#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
-#endif
-
index c1998ad..44d7b06 100644 (file)
@@ -709,7 +709,7 @@ finish:
 EGLContext
 fastpath_eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint* attrib_list)
 {
-       GLGlueContext *gctx = NULL;
+       GLGlueContext *gctx = NULL, *newgctx = NULL;
        GLGlueContext_List *gctx_list_new = NULL;
        MY_MODULE_TSTATE *tstate = NULL;
        GLContextState *cstate = NULL;
@@ -748,24 +748,24 @@ fastpath_eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_con
        AST(_pack_egl_context_sharable_option(real_ctx_sharable_option, share_context) == 1);
 
        // Allocate a new context
-       gctx = (GLGlueContext *)calloc(1, sizeof(GLGlueContext));
-       if (gctx == NULL)
+       newgctx = (GLGlueContext *)calloc(1, sizeof(GLGlueContext));
+       if (newgctx == NULL)
        {
                COREGL_ERR("\E[40;31;1mError creating a new GLGlueContext(Memory full 3)\E[0m\n");
                goto finish;
        }
 
-       gctx->magic = MAGIC_GLFAST;
-       gctx->initialized = 0;
-       gctx->rdpy = dpy;
-       gctx->thread_id = get_current_thread();
+       newgctx->magic = MAGIC_GLFAST;
+       newgctx->initialized = 0;
+       newgctx->rdpy = dpy;
+       newgctx->thread_id = get_current_thread();
 
        if (share_context != EGL_NO_CONTEXT)
        {
                GLGlueContext *shared_gctx = (GLGlueContext *)share_context;
                AST(shared_gctx->magic == MAGIC_GLFAST);
                AST(shared_gctx->sostate != NULL);
-               gctx->sostate = shared_gctx->sostate;
+               newgctx->sostate = shared_gctx->sostate;
        }
        else
        {
@@ -776,18 +776,18 @@ fastpath_eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_con
                        goto finish;
                }
                fastpath_sostate_init(sostate_new);
-               gctx->sostate = sostate_new;
+               newgctx->sostate = sostate_new;
        }
-       _add_shared_obj_state_ref(gctx, gctx->sostate);
-       gctx->real_ctx_option = real_ctx_option;
-       gctx->real_ctx_option_len = sizeof(EGL_packed_option);
-       gctx->real_ctx_sharable_option = real_ctx_sharable_option;
-       gctx->real_ctx_sharable_option_len = sizeof(EGL_packed_sharable_option);
+       _add_shared_obj_state_ref(newgctx, newgctx->sostate);
+       newgctx->real_ctx_option = real_ctx_option;
+       newgctx->real_ctx_option_len = sizeof(EGL_packed_option);
+       newgctx->real_ctx_sharable_option = real_ctx_sharable_option;
+       newgctx->real_ctx_sharable_option_len = sizeof(EGL_packed_sharable_option);
 
-       _link_context_state(gctx, cstate);
-       _add_context_ref(gctx);
+       _link_context_state(newgctx, cstate);
+       _add_context_ref(newgctx);
 
-       gctx->cstate = cstate;
+       newgctx->cstate = cstate;
 
        { // Add glue context to list
                gctx_list_new = (GLGlueContext_List *)calloc(1, sizeof(GLGlueContext_List));
@@ -799,7 +799,7 @@ fastpath_eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_con
 
                AST(mutex_lock(&ctx_list_access_mutex) == 1);
 
-               gctx_list_new->gctx = gctx;
+               gctx_list_new->gctx = newgctx;
 
                gctx_list_new->prev = NULL;
                gctx_list_new->next = gctx_list;
@@ -811,13 +811,15 @@ fastpath_eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_con
                AST(mutex_unlock(&ctx_list_access_mutex) == 1);
        }
 
+       gctx = newgctx;
+
 #ifdef COREGL_FASTPATH_TRACE_CONTEXT_INFO
        if (unlikely(trace_ctx_flag == 1))
        {
                char ment[256];
-               add_to_general_trace_list(&glue_ctx_trace_list, gctx);
+               add_to_general_trace_list(&glue_ctx_trace_list, newgctx);
 
-               sprintf(ment, "eglCreateContext completed (GlueCTX=[%12p])", gctx);
+               sprintf(ment, "eglCreateContext completed (GlueCTX=[%12p])", newgctx);
                _dump_context_info(ment, 1);
        }
 #endif // COREGL_FASTPATH_TRACE_CONTEXT_INFO
@@ -874,6 +876,12 @@ finish:
 
                        free(gctx_list_new);
                }
+               if (newgctx != NULL)
+               {
+                       _remove_context_ref(newgctx, &ctx_list_access_mutex);
+                       free(newgctx);
+                       newgctx = NULL;
+               }
        }
 
        _COREGL_FASTPATH_FUNC_END();