top: whack insidious bug surrounding auto-sized fields
This patch will eliminate a bug which is unique to our newlib branch. It's extremely rare and only happens if a search ('L'/'&') is initiated during the period when fields are currently being auto-sized (AUTOX_MODE on). This bug surfaces as either all zero results for tasks displayed or a segmentation fault, depending upon what fields were activated. It is caused by the timing of a call to the <pids> 'reset' function. When called after a task refresh, but before do_key(), this bug appears. So this patch just ensures that 'reset' will be called after do_key() & before the tasks have been refreshed. Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
11cf6cc005
commit
8174a5c8b7
11
top/top.c
11
top/top.c
@ -2173,7 +2173,8 @@ static inline void widths_resize (void) {
|
|||||||
Autox_found = 1;
|
Autox_found = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Autox_found) calibrate_fields();
|
// trigger a call to calibrate_fields (via zap_fieldstab)
|
||||||
|
if (Autox_found) Frames_signal = BREAK_autox;
|
||||||
} // end: widths_resize
|
} // end: widths_resize
|
||||||
|
|
||||||
|
|
||||||
@ -5935,6 +5936,10 @@ static void frame_make (void) {
|
|||||||
WIN_t *w = Curwin; // avoid gcc bloat with a local copy
|
WIN_t *w = Curwin; // avoid gcc bloat with a local copy
|
||||||
int i, scrlins;
|
int i, scrlins;
|
||||||
|
|
||||||
|
// check auto-sized width increases from the last iteration...
|
||||||
|
if (AUTOX_MODE && Autox_found)
|
||||||
|
widths_resize();
|
||||||
|
|
||||||
// deal with potential signal(s) since the last time around...
|
// deal with potential signal(s) since the last time around...
|
||||||
if (Frames_signal)
|
if (Frames_signal)
|
||||||
zap_fieldstab();
|
zap_fieldstab();
|
||||||
@ -5986,10 +5991,6 @@ static void frame_make (void) {
|
|||||||
/* we'll deem any terminal not supporting tgoto as dumb and disable
|
/* we'll deem any terminal not supporting tgoto as dumb and disable
|
||||||
the normal non-interactive output optimization... */
|
the normal non-interactive output optimization... */
|
||||||
if (!Cap_can_goto) PSU_CLREOS(0);
|
if (!Cap_can_goto) PSU_CLREOS(0);
|
||||||
|
|
||||||
/* lastly, check auto-sized width needs for the next iteration */
|
|
||||||
if (AUTOX_MODE && Autox_found)
|
|
||||||
widths_resize();
|
|
||||||
} // end: frame_make
|
} // end: frame_make
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ enum scale_enum {
|
|||||||
|
|
||||||
/* Used to manipulate (and document) the Frames_signal states */
|
/* Used to manipulate (and document) the Frames_signal states */
|
||||||
enum resize_states {
|
enum resize_states {
|
||||||
BREAK_off = 0, BREAK_kbd, BREAK_sig
|
BREAK_off = 0, BREAK_kbd, BREAK_sig, BREAK_autox
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This typedef just ensures consistent 'process flags' handling */
|
/* This typedef just ensures consistent 'process flags' handling */
|
||||||
|
Loading…
Reference in New Issue
Block a user