* xterm.c:handle_one_xevent question
@ 2004-02-25 7:06 Miles Bader
2004-02-25 8:47 ` Jan D.
2004-02-25 10:33 ` Kim F. Storm
0 siblings, 2 replies; 5+ messages in thread
From: Miles Bader @ 2004-02-25 7:06 UTC (permalink / raw
[-- Attachment #1: Type: text/plain, Size: 886 bytes --]
I got an emacs abort at the following place in handle_one_xevent
(xterm.c):
...
/* If not using XIM/XIC, and a compose sequence is in progress,
we break here. Otherwise, chars_matched is always 0. */
if (compose_status.chars_matched > 0 && nbytes == 0)
break;
orig_keysym = keysym;
if (numchars > 1)
{
Lisp_Object c;
/* First deal with keysyms which have defined
translations to characters. */
if (keysym >= 32 && keysym < 128)
...
else
abort ();
}
else
====> abort ();
...
I don't understand this code; can someone explain why numchars has to
be > 1? I've attached a bit of a gdb session, though it probably isn't
very helpful...
Thanks,
-Miles
[-- Attachment #2: gdb session from emacs crash --]
[-- Type: text/plain, Size: 18289 bytes --]
(gdb) ba
#0 abort () at /usr/local/src/emacs/tiling/src/emacs.c:417
#1 0x081177db in handle_one_xevent (dpyinfo=0x86b7e10, eventp=0xbfffc664,
bufp_r=0xbfffc898, numcharsp=0xbfffc89c, finish=0x8429f18)
at /usr/local/src/emacs/tiling/src/xterm.c:6626
#2 0x081161ba in event_handler_gdk (gxev=0xbfffc664, ev=0x8710380, data=0x0)
at /usr/local/src/emacs/tiling/src/xterm.c:5773
#3 0x402af658 in gdk_event_get_graphics_expose ()
from /usr/lib/libgdk-x11-2.0.so.0
#4 0x402aff63 in _gdk_x11_register_event_type ()
from /usr/lib/libgdk-x11-2.0.so.0
#5 0x402b15ed in _gdk_events_queue () from /usr/lib/libgdk-x11-2.0.so.0
#6 0x402b17dd in _gdk_events_queue () from /usr/lib/libgdk-x11-2.0.so.0
#7 0x403ea086 in unblock_source () from /usr/lib/libglib-2.0.so.0
#8 0x403eb029 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#9 0x403eb347 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#10 0x403eb55d in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#11 0x400f3fd1 in gtk_main_iteration () from /usr/lib/libgtk-x11-2.0.so.0
#12 0x08118716 in XTread_socket (sd=0, bufp=0xbfffd9e8, numchars=1, expected=1)
at /usr/local/src/emacs/tiling/src/xterm.c:7278
#13 0x08151fda in read_avail_input (expected=1)
at /usr/local/src/emacs/tiling/src/keyboard.c:6598
#14 0x0815227b in handle_async_input ()
at /usr/local/src/emacs/tiling/src/keyboard.c:6754
#15 0x081522bb in input_available_signal (signo=29)
at /usr/local/src/emacs/tiling/src/keyboard.c:6793
#16 <signal handler called>
#17 0x4068d2f7 in close () from /lib/tls/libc.so.6
#18 0x081634cb in emacs_close (fd=10)
at /usr/local/src/emacs/tiling/src/sysdep.c:3254
#19 0x08181ab1 in Fwrite_region (start=1, end=234437, filename=1757495912,
append=675717136, visit=675776936, lockname=1757495912,
mustbenew=675717136) at /usr/local/src/emacs/tiling/src/fileio.c:5182
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) fr 1
#1 0x081177db in handle_one_xevent (dpyinfo=0x86b7e10, eventp=0xbfffc664,
bufp_r=0xbfffc898, numcharsp=0xbfffc89c, finish=0x8429f18)
at /usr/local/src/emacs/tiling/src/xterm.c:6626
6626 abort ();
(gdb) li
6621 }
6622 else
6623 abort ();
6624 }
6625 else
6626 abort ();
6627 }
6628 #ifdef HAVE_X_I18N
6629 /* Don't dispatch this event since XtDispatchEvent calls
6630 XFilterEvent, and two calls in a row may freeze the
(gdb) p *f->output_data.x
$8 = {
menubar_height = 0,
toolbar_height = 0,
border_tile = 29360216,
background_tile_gc = 0x8984928,
background_tile_gc_state = {
x_offs = 4,
y_offs = 26
},
background_tile_pixmap = 29360262,
normal_gc = 0x870f7e0,
reverse_gc = 0x870f858,
cursor_gc = 0x870f8d0,
window_desc = 29360204,
icon_desc = 0,
parent_desc = 14856320,
widget = 0x86eae70,
edit_widget = 0x86ec108,
vbox_widget = 0x86ebde0,
menubar_widget = 0x0,
toolbar_widget = 0x0,
handlebox_widget = 0x0,
size_hints = {
min_width = 40,
min_height = 40,
max_width = 0,
max_height = 0,
base_width = 20,
base_height = 0,
width_inc = 10,
height_inc = 20,
min_aspect = 0,
---Type <return> to continue, or q <return> to quit---
max_aspect = 0,
win_gravity = GDK_GRAVITY_NORTH_WEST
},
hint_flags = 490,
icon_bitmap = 0,
font = 0x86d9fe8,
baseline_offset = 0,
fontset = 2,
background_pixel = 0,
foreground_pixel = 16777215,
cursor_pixel = 11530159,
border_pixel = 0,
mouse_pixel = 16777215,
cursor_foreground_pixel = 0,
scroll_bar_foreground_pixel = 8355711,
scroll_bar_background_pixel = 5066061,
scroll_bar_top_shadow_pixel = 4294967295,
scroll_bar_bottom_shadow_pixel = 4294967295,
text_cursor = 29360221,
nontext_cursor = 29360225,
modeline_cursor = 29360233,
hand_cursor = 29360237,
hourglass_cursor = 29360229,
horizontal_drag_cursor = 29360241,
hourglass_window = 0,
hourglass_p = 0,
needs_exposure = 0,
wm_hints = {
flags = 2,
input = 0,
initial_state = 1,
icon_pixmap = 0,
---Type <return> to continue, or q <return> to quit---
icon_window = 0,
icon_x = 0,
icon_y = 0,
icon_mask = 0,
window_group = 0
},
display_info = 0x86b7e10,
saved_menu_event = 0x0,
explicit_parent = 0 '\0',
asked_for_visible = 1 '\001',
has_been_visible = 1 '\001',
xic = 0x0,
xic_style = 0,
xic_xfs = 0x0,
black_relief = {
gc = 0x8612628,
pixel = 2302755,
allocated_p = 1
},
white_relief = {
gc = 0x86561c8,
pixel = 9013641,
allocated_p = 1
},
relief_background = 5066061,
wait_for_wm = 1,
x_pixels_outer_diff = 4,
y_pixels_outer_diff = 26,
focus_state = 2,
expected_top = 0,
expected_left = 0,
move_offset_top = 0,
---Type <return> to continue, or q <return> to quit---
move_offset_left = 0,
check_expected_move = 0
}
(gdb) p copy_bufptr
$9 = (unsigned char *) 0xbfffbf94 "j"
(gdb) p copy_bufsiz
$10 = 513
(gdb) p keysym
$11 = 106
(gdb) p compose_status
$12 = {
compose_ptr = 0x0,
chars_matched = 0
}
(gdb) i loc
keysym = 106
copy_bufptr = (unsigned char *) 0xbfffbf94 "j"
copy_bufsiz = 513
orig_keysym = 106
copy_buffer = "j\00057 30059 30072 30075 30080 30085 30095 (30098 . 30099) 30118 30120 30172 30485 30521 30531 30539 30732 30739 31025 31064 31087 31295 31379 31402 31406 31409 31412 31416 31502 31533 31545 31567 31589"...
modifiers = 0
coding_system = 675917232
count = 0
nbytes = 1
f = (struct frame *) 0x86d7248
coding = {
type = 3221210020,
eol_type = 20,
common_flags = 0,
flags = 0,
mode = 1076284996,
composing = 141447784,
composition_rule_follows = -1073757572,
cmp_data = 0x400f59f3,
cmp_data_start = -1073757276,
cmp_data_index = 0,
spec = {
iso2022 = {
current_invocation = {141402888, 1077682792},
current_designation = {-1073756988, 141447784, -1073757556, 1077618670},
initial_designation = {-1073756988, 20, 141471344, 1077682792},
last_invalid_designation_register = -1073756988,
requested_designation = "hRn\b\274\302\377\277nA;@\001\000\000\000D{j\bD{j\bh\"<@d\304\377\277\000\000\000\000\314\302\377\277nA;@\024\000\000\000\024\000\000\000 \000\000\000n<;@\000\000\000\000\244\303\377\277\334\302\377\277\351;;@---Type <return> to continue, or q <return> to quit---
\024\000\000\000D{j\b\000\000\000\000h\"<@\244\303\377\277\024\000\000\000\f\303\377\277\252\024>@p\256n\b\024\000\000\000D{j\b\216\024>@d\304\377\277\000\000\000\000\250{j\bh\"<@\000\000\000\000\270\303\377\277\374\303\377\277\332\265:@\224\303\377\277X\366p\b\b\000\000\000\b\000\000\000\274B\231\b\324\254\232\b\244\303\377\277N4;@\204X\214\bP\366p\b\000\000\000\000"...,
charset_revision_number = "\000\304\303\377\277\000\000\000\000\023\000\000\340\032\000\000\000\001\000\000\000T\237j\bh\"<@p\256n\b\210 n\b\274\303\377\277\375\3749@p\256n\bP\000\000\000\210 n\bN4;@h\"<@\304\304\377\277\354\303\377\277\322\024>@8\330n\b(\304\377\277\340\357j\b1\334)@p\003:@\001\000\000\0008\320j\b\264\350-@\250\bk\b\000\000\000\000\034\304\377\277\177\232,@\000\031k\bD\316&@\034\304\377\277rV\017@\200\327n\b\024\304\377\277\034\306\377\277\264\350-@p\256n\b\264\350-@\234\304\377\277(\347\023\b4\304\377\277,\000\300\001\250{j\b\000\000\000\000d\304\377\277\200\327n\b\320Jn"...,
single_shifting = 0,
bol = 144261776
},
ccl = {
decoder = {
size = 141402888,
prog = 0x403c2268,
ic = -1073756988,
eof_ic = 141447784,
reg = {-1073757556, 1077618670, -1073756988, 20, 141471344,
1077682792, -1073756988, 141447784},
private_state = -1073757508,
last_block = 1077625198,
status = 1,
buf_magnification = 141196100,
stack_idx = 141196100,
eol_type = 1077682792,
multibyte = -1073757084,
cr_consumed = 0,
---Type <return> to continue, or q <return> to quit---
suppress_error = -1073757492,
eight_bit_control = 1077625198
},
encoder = {
size = 20,
prog = 0x14,
ic = 32,
eof_ic = 1077623918,
reg = {0, -1073757276, -1073757476, 1077623785, 20, 141196100, 0,
1077682792},
private_state = -1073757276,
last_block = 20,
status = -1073757428,
buf_magnification = 1077810346,
stack_idx = 141471344,
eol_type = 20,
multibyte = 141196100,
cr_consumed = 1077810318,
suppress_error = -1073757084,
eight_bit_control = 0
},
valid_codes = "\250{j\bh\"<@\000\000\000\000\270\303\377\277\374\303\377\277\332\265:@\224\303\377\277X\366p\b\b\000\000\000\b\000\000\000\274B\231\b\324\254\232\b\244\303\377\277N4;@\204X\214\bP\366p\b\000\000\000\000\b\000\000\000\000^:@\224\303\377\277\000\000\000\000\023\000\000\340\340\237j\b\001\000\000\000T\237j\bN4;@p\256n\b\304\304\377\277\214\303\377\277\000\000\000\000\000\000\000\000\304\303\377\277\000\000\000\000\023\000\000\340\032\000\000\000\001\000\000\000T\237j\bh\"<@p\256n\b\210 n\b\274\303\377\277\375\3749@p\256n\bP\000\000\000\210 n\bN4;@h\"<@\304\304\377\277\354\303\377\277\322\024>@"...,
cr_carryover = -1073757156,
eight_bit_carryover = "rV\017@"
}
---Type <return> to continue, or q <return> to quit---
},
category_idx = 144261776,
src_multibyte = 0,
dst_multibyte = 0,
heading_ascii = 0,
produced = 141471344,
produced_char = 141481856,
consumed = 0,
consumed_char = 0,
errors = -1073756980,
result = 1079024817,
suppress_error = 141225752,
symbol = 29360172,
post_read_conversion = 0,
pre_write_conversion = 0,
translation_table_for_decode = 141471344,
translation_table_for_encode = 141401656
}
bufp = (struct input_event *) 0xbfffd9e8
numchars = 1
event = {
type = 2,
xany = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172
},
xkey = {
type = 2,
serial = 35912,
---Type <return> to continue, or q <return> to quit---
send_event = 0,
display = 0x86aef18,
window = 29360172,
root = 59,
subwindow = 0,
time = 25156164,
x = 486,
y = 436,
x_root = 489,
y_root = 461,
state = 0,
keycode = 44,
same_screen = 1
},
xbutton = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
root = 59,
subwindow = 0,
time = 25156164,
x = 486,
y = 436,
x_root = 489,
y_root = 461,
state = 0,
button = 44,
same_screen = 1
},
xmotion = {
---Type <return> to continue, or q <return> to quit---
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
root = 59,
subwindow = 0,
time = 25156164,
x = 486,
y = 436,
x_root = 489,
y_root = 461,
state = 0,
is_hint = 44 ',',
same_screen = 1
},
xcrossing = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
root = 59,
subwindow = 0,
time = 25156164,
x = 486,
y = 436,
x_root = 489,
y_root = 461,
mode = 0,
detail = 44,
same_screen = 1,
---Type <return> to continue, or q <return> to quit---
focus = 72,
state = 24
},
xfocus = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
mode = 59,
detail = 0
},
xexpose = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
x = 59,
y = 0,
width = 25156164,
height = 486,
count = 436
},
xgraphicsexpose = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
drawable = 29360172,
x = 59,
y = 0,
---Type <return> to continue, or q <return> to quit---
width = 25156164,
height = 486,
count = 436,
major_code = 489,
minor_code = 461
},
xnoexpose = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
drawable = 29360172,
major_code = 59,
minor_code = 0
},
xvisibility = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
state = 59
},
xcreatewindow = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
parent = 29360172,
window = 59,
x = 0,
y = 25156164,
---Type <return> to continue, or q <return> to quit---
width = 486,
height = 436,
border_width = 489,
override_redirect = 461
},
xdestroywindow = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
event = 29360172,
window = 59
},
xunmap = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
event = 29360172,
window = 59,
from_configure = 0
},
xmap = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
event = 29360172,
window = 59,
override_redirect = 0
},
xmaprequest = {
---Type <return> to continue, or q <return> to quit---
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
parent = 29360172,
window = 59
},
xreparent = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
event = 29360172,
window = 59,
parent = 0,
x = 25156164,
y = 486,
override_redirect = 436
},
xconfigure = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
event = 29360172,
window = 59,
x = 0,
y = 25156164,
width = 486,
height = 436,
border_width = 489,
above = 461,
---Type <return> to continue, or q <return> to quit---
override_redirect = 0
},
xgravity = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
event = 29360172,
window = 59,
x = 0,
y = 25156164
},
xresizerequest = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
width = 59,
height = 0
},
xconfigurerequest = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
parent = 29360172,
window = 59,
x = 0,
y = 25156164,
width = 486,
height = 436,
---Type <return> to continue, or q <return> to quit---
border_width = 489,
above = 461,
detail = 0,
value_mask = 44
},
xcirculate = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
event = 29360172,
window = 59,
place = 0
},
xcirculaterequest = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
parent = 29360172,
window = 59,
place = 0
},
xproperty = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
atom = 59,
time = 0,
state = 25156164
---Type <return> to continue, or q <return> to quit---
},
xselectionclear = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
selection = 59,
time = 0
},
xselectionrequest = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
owner = 29360172,
requestor = 59,
selection = 0,
target = 25156164,
property = 486,
time = 436
},
xselection = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
requestor = 29360172,
selection = 59,
target = 0,
property = 25156164,
time = 486
---Type <return> to continue, or q <return> to quit---
},
xcolormap = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
colormap = 59,
new = 0,
state = 25156164
},
xclient = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
message_type = 59,
format = 0,
data = {
b = "D\332\177\001\346\001\000\000\264\001\000\000\351\001\000\000\315\001\000",
s = {-9660, 383, 486, 0, 436, 0, 489, 0, 461, 0},
l = {25156164, 486, 436, 489, 461}
}
},
xmapping = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
---Type <return> to continue, or q <return> to quit---
request = 59,
first_keycode = 0,
count = 25156164
},
xerror = {
type = 2,
display = 0x8c48,
resourceid = 0,
serial = 141225752,
error_code = 44 ',',
request_code = 0 '\0',
minor_code = 192 '\300'
},
xkeymap = {
type = 2,
serial = 35912,
send_event = 0,
display = 0x86aef18,
window = 29360172,
key_vector = ";\000\000\000\000\000\000\000D\332\177\001\346\001\000\000\264\001\000\000\351\001\000\000\315\001\000\000\000\000\000"
},
pad = {2, 35912, 0, 141225752, 29360172, 59, 0, 25156164, 486, 436, 489,
461, 0, 44, 1, 72, 24, 0, 1752461127, 1277191017, 842080300, 120, 24, 0}
}
(gdb) p *numcharsp
$13 = 1
(gdb) up
#2 0x081161ba in event_handler_gdk (gxev=0xbfffc664, ev=0x8710380, data=0x0)
at /usr/local/src/emacs/tiling/src/xterm.c:5773
5773 current_count += handle_one_xevent (dpyinfo,
(gdb) li
5768 #endif
5769
5770 if (! dpyinfo)
5771 current_finish = X_EVENT_NORMAL;
5772 else
5773 current_count += handle_one_xevent (dpyinfo,
5774 xev,
5775 current_bufp,
5776 current_numcharsp,
5777 ¤t_finish);
(gdb) fr
#2 0x081161ba in event_handler_gdk (gxev=0xbfffc664, ev=0x8710380, data=0x0)
at /usr/local/src/emacs/tiling/src/xterm.c:5773
5773 current_count += handle_one_xevent (dpyinfo,
(gdb) p curent_numcharsp
No symbol "curent_numcharsp" in current context.
(gdb) p current_numcharsp
$14 = (int *) 0xbfffc89c
(gdb) p *$
$15 = 1
(gdb) p current_bufp
$16 = (struct input_event **) 0xbfffc898
(gdb) p *$
$17 = (struct input_event *) 0xbfffd9e8
(gdb) i loc
dpyinfo = (struct x_display_info *) 0x86b7e10
xev = (XEvent *) 0xbfffc664
[-- Attachment #3: Type: text/plain, Size: 28 bytes --]
--
Run away! Run away!
[-- Attachment #4: Type: text/plain, Size: 141 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: xterm.c:handle_one_xevent question
2004-02-25 7:06 xterm.c:handle_one_xevent question Miles Bader
@ 2004-02-25 8:47 ` Jan D.
2004-02-25 10:33 ` Kim F. Storm
1 sibling, 0 replies; 5+ messages in thread
From: Jan D. @ 2004-02-25 8:47 UTC (permalink / raw
Cc: emacs-devel
> I got an emacs abort at the following place in handle_one_xevent
> (xterm.c):
>
> ...
> /* If not using XIM/XIC, and a compose sequence is in
> progress,
> we break here. Otherwise, chars_matched is always 0. */
> if (compose_status.chars_matched > 0 && nbytes == 0)
> break;
>
> orig_keysym = keysym;
>
> if (numchars > 1)
> {
> Lisp_Object c;
>
> /* First deal with keysyms which have defined
> translations to characters. */
> if (keysym >= 32 && keysym < 128)
> ...
> else
> abort ();
> }
> else
> ====> abort ();
> ...
>
>
> I don't understand this code; can someone explain why numchars has to
> be > 1? I've attached a bit of a gdb session, though it probably isn't
> very helpful...
I can not see any reson for that. It should be enough that numchars is
> 0.
A typo?
Jan D.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: xterm.c:handle_one_xevent question
2004-02-25 10:33 ` Kim F. Storm
@ 2004-02-25 10:04 ` Jan D.
2004-02-25 11:26 ` Kim F. Storm
0 siblings, 1 reply; 5+ messages in thread
From: Jan D. @ 2004-02-25 10:04 UTC (permalink / raw
Cc: emacs-devel, Miles Bader
>
> It seems that my recent change to read_avail_input (which
> significantly reduced the size of the event buffer) has triggered
> some errors in the "read_socket_hook" functions on W32 and X (and
> probably MAC as well).
The gdb trace sent my Miles shows that the buffer size is just 1 when
XTread_socket is called. This is way to small for X at least, X events
often arrive more than one at the time. I don't know if this is part
of the fix you mentioned, but please consider increasing the minimum
size so that it is more than one.
Jan D.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: xterm.c:handle_one_xevent question
2004-02-25 7:06 xterm.c:handle_one_xevent question Miles Bader
2004-02-25 8:47 ` Jan D.
@ 2004-02-25 10:33 ` Kim F. Storm
2004-02-25 10:04 ` Jan D.
1 sibling, 1 reply; 5+ messages in thread
From: Kim F. Storm @ 2004-02-25 10:33 UTC (permalink / raw
Cc: emacs-devel
Miles Bader <miles@lsi.nec.co.jp> writes:
> I got an emacs abort at the following place in handle_one_xevent
> (xterm.c):
>
It seems that my recent change to read_avail_input (which
significantly reduced the size of the event buffer) has triggered
some errors in the "read_socket_hook" functions on W32 and X (and
probably MAC as well).
The problem is that the numchars parameter indicating the buffer size
is not checked to see how much can be stuffed into the buffer (and
return when full), but rather [in an inconsistent way] to check that
there is always sufficient space in the buffer or abort otherwise.
I already posted a quick patch for W32 to this list, but haven't
committed it yet, as the rest of the code should be cleaned up.
If someone will commit it, you're welcome.
I will go through the X and MAC code to see what's needed to fix this,
but it will have to wait a few days, so if somebody else want to take
up the challange, feel free to do so.
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: xterm.c:handle_one_xevent question
2004-02-25 10:04 ` Jan D.
@ 2004-02-25 11:26 ` Kim F. Storm
0 siblings, 0 replies; 5+ messages in thread
From: Kim F. Storm @ 2004-02-25 11:26 UTC (permalink / raw
Cc: emacs-devel, Miles Bader
"Jan D." <jan.h.d@swipnet.se> writes:
> >
> > It seems that my recent change to read_avail_input (which
> > significantly reduced the size of the event buffer) has triggered
> > some errors in the "read_socket_hook" functions on W32 and X (and
> > probably MAC as well).
>
> The gdb trace sent my Miles shows that the buffer size is just 1 when
> XTread_socket is called. This is way to small for X at least, X events
> often arrive more than one at the time. I don't know if this is part
> of the fix you mentioned, but please consider increasing the minimum
> size so that it is more than one.
The size is 8 initially, but if more than 8 events have arrived,
XTread_socket aborts rather than returns.
I'll look into correcting XTread_socket tomorrow.
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2004-02-25 11:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-02-25 7:06 xterm.c:handle_one_xevent question Miles Bader
2004-02-25 8:47 ` Jan D.
2004-02-25 10:33 ` Kim F. Storm
2004-02-25 10:04 ` Jan D.
2004-02-25 11:26 ` Kim F. Storm
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).