Evas: Check for the presence of shm extension (in
evas_software_xcb_can_do_shm) first before trying to make calls to the shm extension. SVN revision: 62638
This commit is contained in:
parent
57cc30c651
commit
f7d1b738e6
|
@ -222,26 +222,33 @@ evas_software_xcb_write_mask_line_vert_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
evas_software_xcb_can_do_shm(xcb_connection_t *conn, xcb_screen_t *screen)
|
evas_software_xcb_can_do_shm(xcb_connection_t *conn, xcb_screen_t *screen)
|
||||||
{
|
{
|
||||||
|
const xcb_query_extension_reply_t *reply;
|
||||||
static xcb_connection_t *cached_conn = NULL;
|
static xcb_connection_t *cached_conn = NULL;
|
||||||
static int cached_result = 0;
|
static int cached_result = 0;
|
||||||
Xcb_Output_Buffer *xcbob = NULL;
|
|
||||||
xcb_visualtype_t *visual;
|
|
||||||
|
|
||||||
if (conn == cached_conn) return cached_result;
|
if (conn == cached_conn) return cached_result;
|
||||||
cached_conn = conn;
|
cached_conn = conn;
|
||||||
|
|
||||||
visual = _xcbob_find_visual_by_id(screen, screen->root_visual);
|
reply = xcb_get_extension_data(conn, &xcb_shm_id);
|
||||||
|
if ((reply) && (reply->present))
|
||||||
xcbob =
|
|
||||||
evas_software_xcb_output_buffer_new(conn, visual, screen->root_depth,
|
|
||||||
16, 16, 2, NULL);
|
|
||||||
if (!xcbob)
|
|
||||||
cached_result = 0;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
evas_software_xcb_output_buffer_free(xcbob, EINA_TRUE);
|
xcb_visualtype_t *visual;
|
||||||
cached_result = 1;
|
Xcb_Output_Buffer *xcbob = NULL;
|
||||||
|
|
||||||
|
visual = _xcbob_find_visual_by_id(screen, screen->root_visual);
|
||||||
|
xcbob =
|
||||||
|
evas_software_xcb_output_buffer_new(conn, visual, screen->root_depth,
|
||||||
|
16, 16, 2, NULL);
|
||||||
|
if (!xcbob)
|
||||||
|
cached_result = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evas_software_xcb_output_buffer_free(xcbob, EINA_TRUE);
|
||||||
|
cached_result = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
cached_result = 0;
|
||||||
|
|
||||||
return cached_result;
|
return cached_result;
|
||||||
}
|
}
|
||||||
|
@ -276,8 +283,6 @@ evas_software_xcb_output_buffer_new(xcb_connection_t *conn, xcb_visualtype_t *vi
|
||||||
shmget(IPC_PRIVATE,
|
shmget(IPC_PRIVATE,
|
||||||
xcbob->xim->stride * xcbob->xim->height,
|
xcbob->xim->stride * xcbob->xim->height,
|
||||||
(IPC_CREAT | 0777));
|
(IPC_CREAT | 0777));
|
||||||
/* xcbob->shm_info->shmid = */
|
|
||||||
/* shmget(IPC_PRIVATE, xcbob->xim->size, (IPC_CREAT | 0777)); */
|
|
||||||
if (xcbob->shm_info->shmid == (uint32_t)-1)
|
if (xcbob->shm_info->shmid == (uint32_t)-1)
|
||||||
{
|
{
|
||||||
xcb_image_destroy(xcbob->xim);
|
xcb_image_destroy(xcbob->xim);
|
||||||
|
@ -292,7 +297,6 @@ evas_software_xcb_output_buffer_new(xcb_connection_t *conn, xcb_visualtype_t *vi
|
||||||
/* Sync only needed for testing */
|
/* Sync only needed for testing */
|
||||||
if (try_shm == 2) _xcbob_sync(conn);
|
if (try_shm == 2) _xcbob_sync(conn);
|
||||||
|
|
||||||
// xcbob->xim->data = xcbob->shm_info->shmaddr;
|
|
||||||
#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
|
#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
|
||||||
if (evas_common_frameq_enabled())
|
if (evas_common_frameq_enabled())
|
||||||
xcb_grab_server(conn);
|
xcb_grab_server(conn);
|
||||||
|
|
Loading…
Reference in New Issue