X11rdp: check for errors from shmem calls

ulab-next-nosound
Jay Sorg 10 years ago
parent f9c848f3ca
commit 4a95950f96

@ -35,7 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0) do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
static int g_use_shmem = 1; /* turns on or off */ static int g_use_shmem = 1; /* turns on or off */
static int g_shmemid = 0; static int g_shmemid = -1;
static char *g_shmemptr = 0; static char *g_shmemptr = 0;
static int g_shmem_lineBytes = 0; static int g_shmem_lineBytes = 0;
static RegionPtr g_shm_reg = 0; static RegionPtr g_shm_reg = 0;
@ -750,22 +750,36 @@ process_screen_size_msg(int width, int height, int bpp)
if (g_shmemptr != 0) if (g_shmemptr != 0)
{ {
shmdt(g_shmemptr); shmdt(g_shmemptr);
g_shmemptr = 0;
} }
bytes = g_rdpScreen.rdp_width * g_rdpScreen.rdp_height * bytes = g_rdpScreen.rdp_width * g_rdpScreen.rdp_height *
g_rdpScreen.rdp_Bpp; g_rdpScreen.rdp_Bpp;
g_shmemid = shmget(IPC_PRIVATE, bytes, IPC_CREAT | 0777); g_shmemid = shmget(IPC_PRIVATE, bytes, IPC_CREAT | 0777);
if (g_shmemid != -1)
{
g_shmemptr = shmat(g_shmemid, 0, 0); g_shmemptr = shmat(g_shmemid, 0, 0);
if (g_shmemptr == (void *) -1)
{
LLOGLN(0, ("process_screen_size_msg: shmat failed for %d "
"bytes g_shmemid %d", bytes, g_shmemid));
g_shmemptr = 0;
shmctl(g_shmemid, IPC_RMID, NULL); shmctl(g_shmemid, IPC_RMID, NULL);
g_shmemid = -1;
}
else
{
shmctl(g_shmemid, IPC_RMID, NULL);
}
LLOGLN(0, ("process_screen_size_msg: g_shmemid %d g_shmemptr %p", LLOGLN(0, ("process_screen_size_msg: g_shmemid %d g_shmemptr %p",
g_shmemid, g_shmemptr)); g_shmemid, g_shmemptr));
g_shmem_lineBytes = g_rdpScreen.rdp_Bpp * g_rdpScreen.rdp_width; g_shmem_lineBytes = g_rdpScreen.rdp_Bpp * g_rdpScreen.rdp_width;
if (g_shm_reg != 0) if (g_shm_reg != 0)
{ {
RegionDestroy(g_shm_reg); RegionDestroy(g_shm_reg);
} }
g_shm_reg = RegionCreate(NullBox, 0); g_shm_reg = RegionCreate(NullBox, 0);
} }
}
mmwidth = PixelToMM(width); mmwidth = PixelToMM(width);
mmheight = PixelToMM(height); mmheight = PixelToMM(height);

Loading…
Cancel
Save