From: Peter A. <pe...@ce...> - 2004-10-21 11:11:46
|
When running rdesktop through valgrind, I get: ==22630== Syscall param writev(vector[...]) contains uninitialised or unaddressable byte(s) ==22630== at 0x69A87C: writev (in /lib/tls/libc-2.3.3.so) ==22630== by 0x7951AF: (within /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x795F2E: _X11TransWritev (in /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x7765F4: _XSend (in /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x76BB53: (within /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x76C26A: XPutImage (in /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x80508A3: ui_desktop_restore (xwin.c:2181) ==22630== by 0x805744D: process_desksave (orders.c:357) ==22630== by 0x8058301: process_orders (orders.c:1013) ==22630== Address 0x1B9C40AA is 834 bytes inside a block of size 241604 alloc'd ==22630== at 0x1B904A80: malloc (vg_replace_malloc.c:131) ==22630== by 0x778BB4: _XAllocScratch (in /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x76BC81: (within /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x76C26A: XPutImage (in /usr/X11R6/lib/libX11.so.6.2) ==22630== by 0x80508A3: ui_desktop_restore (xwin.c:2181) ==22630== by 0x805744D: process_desksave (orders.c:357) ==22630== by 0x8058301: process_orders (orders.c:1013) ==22630== by 0x805BE34: rdp5_process (rdp5.c:91) ==22630== by 0x80555EA: rdp_recv (rdp.c:70) The problem seems to be something with the combo: XCreateImage/XPutImage. I've tried changing: image = XCreateImage(g_display, g_visual, g_depth, ZPixmap, 0, (char *) data, cx, cy, BitmapPad(g_display), cx * g_bpp / 8); into: image = XCreateImage(g_display, g_visual, g_depth, ZPixmap, 0, (char *) data, cx, cy, BitmapPad(g_display), 0); This makes the warnings disappear, but instead, another one pops up: ==23332== Syscall param writev(vector[...]) contains uninitialised or unaddressable byte(s) ==23332== at 0x69A87C: writev (in /lib/tls/libc-2.3.3.so) ==23332== by 0x7951AF: (within /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x795F2E: _X11TransWritev (in /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x7765F4: _XSend (in /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x76BB53: (within /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x76C26A: XPutImage (in /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x804EDAA: ui_paint_bitmap (xwin.c:1523) ==23332== by 0x805681A: process_bitmap_updates (rdp.c:986) ==23332== by 0x805BE4C: rdp5_process (rdp5.c:95) ==23332== Address 0x1BA88FDA is 226 bytes inside a block of size 8436 alloc'd ==23332== at 0x1B904A80: malloc (vg_replace_malloc.c:131) ==23332== by 0x778BB4: _XAllocScratch (in /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x76BC81: (within /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x76C26A: XPutImage (in /usr/X11R6/lib/libX11.so.6.2) ==23332== by 0x804EDAA: ui_paint_bitmap (xwin.c:1523) ==23332== by 0x805681A: process_bitmap_updates (rdp.c:986) ==23332== by 0x805BE4C: rdp5_process (rdp5.c:95) ==23332== by 0x80555D2: rdp_recv (rdp.c:70) ==23332== by 0x8056B50: rdp_loop (rdp.c:1171) I must admit that I know very little about X11 image padding. For example, when is it appropriate to use the BitmapPad function, and when should this custom code be used?: int bitmap_pad; if (g_server_bpp == 8) { bitmap_pad = 8; } else { bitmap_pad = g_bpp; if (g_bpp == 24) bitmap_pad = 32; } Any ideas? -- Peter Åstrand Chief Developer Cendio www.thinlinc.com Teknikringen 3 www.cendio.se 583 30 Linköping Phone: +46-13-21 46 00 |