[Title] Fix webgl crash issue.
[Issue#] DCM-2169
[Problem] Webgl page does not launch in the emulator.
[Cause] Member variable was not cleared after calling XDestroyImage.
[Solution] Clear member variable.
Change-Id: Id79303845ebbf708f6a60ff058ca0e3f6c30ac96
m_shmInfo.shmid = shmget(IPC_PRIVATE, m_xImage->bytes_per_line * m_xImage->height, IPC_CREAT | 0666);
if (m_shmInfo.shmid == -1) {
XDestroyImage(m_xImage);
m_shmInfo.shmid = shmget(IPC_PRIVATE, m_xImage->bytes_per_line * m_xImage->height, IPC_CREAT | 0666);
if (m_shmInfo.shmid == -1) {
XDestroyImage(m_xImage);
fprintf(stderr, "Error getting the shared image info\n");
return;
}
fprintf(stderr, "Error getting the shared image info\n");
return;
}
shmdt(m_shmInfo.shmaddr);
shmctl(m_shmInfo.shmid, IPC_RMID, 0);
XDestroyImage(m_xImage);
shmdt(m_shmInfo.shmaddr);
shmctl(m_shmInfo.shmid, IPC_RMID, 0);
XDestroyImage(m_xImage);
+ if (!m_xImage)
+ return;
+
XGrabServer(g_display);
if (!XShmGetImage(g_display, (Drawable)m_platformSurfaceID, m_xImage, 0, 0, 0xffffffff))
fprintf(stderr, "Error Getting ShmGetImage\n");
XGrabServer(g_display);
if (!XShmGetImage(g_display, (Drawable)m_platformSurfaceID, m_xImage, 0, 0, 0xffffffff))
fprintf(stderr, "Error Getting ShmGetImage\n");
std::swap(m_xImage->data[i], m_xImage->data[i + 2]);
}
std::swap(m_xImage->data[i], m_xImage->data[i + 2]);
}
- void* xImageData() { return m_xImage->data; }
+ void* xImageData() { return m_xImage ? m_xImage->data : 0; }
void swapBuffers() { }
IntSize size() const { return m_size; }
void swapBuffers() { }
IntSize size() const { return m_size; }