vere: re-plugs leak in terminal spinner

This commit is contained in:
Joe Bryan 2019-12-18 19:39:38 -08:00
parent adb41996f0
commit 5f3a697aab
3 changed files with 13 additions and 18 deletions

View File

@ -394,7 +394,7 @@
c3_o diz_o; // spinner activated c3_o diz_o; // spinner activated
c3_d eve_d; // spin count c3_d eve_d; // spin count
c3_d end_d; // spinner end tick (ms) c3_d end_d; // spinner end tick (ms)
c3_c* why_c; // spinner label c3_c why_c[5]; // spinner label
} sun_u; } sun_u;
} u3_utat; } u3_utat;
@ -871,7 +871,7 @@
/* u3_term_start_spinner(): prepare spinner state. RETAIN. /* u3_term_start_spinner(): prepare spinner state. RETAIN.
*/ */
void void
u3_term_start_spinner(c3_c* why_c, c3_o now_o); u3_term_start_spinner(u3_noun say, c3_o now_o);
/* u3_term_stop_spinner(): reset spinner state and restore input line. /* u3_term_stop_spinner(): reset spinner state and restore input line.
*/ */

View File

@ -644,10 +644,10 @@ _pier_work_spin_start(u3_writ* wit_u)
{ {
u3_pier* pir_u = wit_u->pir_u; u3_pier* pir_u = wit_u->pir_u;
c3_o now_o = c3n; c3_o now_o = c3n;
c3_c* why_c = 0; u3_noun say = u3_blip;
if ( wit_u->evt_d <= pir_u->lif_d ) { if ( wit_u->evt_d <= pir_u->lif_d ) {
why_c = strdup("nock"); say = c3__nock;
} }
else { else {
u3_noun why; u3_noun why;
@ -661,7 +661,7 @@ _pier_work_spin_start(u3_writ* wit_u)
if ( c3__term != why ) { if ( c3__term != why ) {
why_c = u3r_string(why); say = why;
} }
else if ( ( u3_none != (cad = u3r_at(7, wit_u->job)) ) && else if ( ( u3_none != (cad = u3r_at(7, wit_u->job)) ) &&
( u3_none != (tag = u3r_at(2, cad)) ) && ( u3_none != (tag = u3r_at(2, cad)) ) &&
@ -674,7 +674,7 @@ _pier_work_spin_start(u3_writ* wit_u)
} }
} }
u3_term_start_spinner(why_c, now_o); u3_term_start_spinner(say, now_o);
} }
/* _pier_work_spin_stop(): deactivate spinner. /* _pier_work_spin_stop(): deactivate spinner.

View File

@ -787,12 +787,11 @@ _term_spin_timer_cb(uv_timer_t* tim_u)
*cur_c++ = daz_c[lag_d % strlen(daz_c)]; *cur_c++ = daz_c[lag_d % strlen(daz_c)];
c3_w sol_w = 1; // spinner length (utf-32) c3_w sol_w = 1; // spinner length (utf-32)
if ( tat_u->sun_u.why_c ) { if ( tat_u->sun_u.why_c[0] ) {
strncpy(cur_c, dal_c, 2); strncpy(cur_c, dal_c, 2);
cur_c += 2; cur_c += 2;
sol_w += 1; // length of dal_c (utf-32) sol_w += 1; // length of dal_c (utf-32)
// c3_w wel_w = strlen(tat_u.sun_u->why_c);
strncpy(cur_c, tat_u->sun_u.why_c, 4); strncpy(cur_c, tat_u->sun_u.why_c, 4);
cur_c += 4; cur_c += 4;
sol_w += 4; // XX assumed utf-8 sol_w += 4; // XX assumed utf-8
@ -826,17 +825,17 @@ _term_spin_timer_cb(uv_timer_t* tim_u)
#define _SPIN_RATE_US 250UL // spinner rate (ms/frame) #define _SPIN_RATE_US 250UL // spinner rate (ms/frame)
#define _SPIN_IDLE_US 500UL // spinner cools down if stopped this long #define _SPIN_IDLE_US 500UL // spinner cools down if stopped this long
/* u3_term_start_spinner(): prepare spinner state /* u3_term_start_spinner(): prepare spinner state. RETAIN.
*/ */
void void
u3_term_start_spinner(c3_c* why_c, c3_o now_o) u3_term_start_spinner(u3_noun say, c3_o now_o)
{ {
if ( c3n == u3_Host.ops_u.tem ) { if ( c3n == u3_Host.ops_u.tem ) {
u3_utty* uty_u = _term_main(); u3_utty* uty_u = _term_main();
u3_utat* tat_u = &uty_u->tat_u; u3_utat* tat_u = &uty_u->tat_u;
c3_free(tat_u->sun_u.why_c); tat_u->sun_u.why_c[4] = 0;
tat_u->sun_u.why_c = why_c; u3r_bytes(0, 4, (c3_y*)tat_u->sun_u.why_c, say);
tat_u->sun_u.eve_d = 0; tat_u->sun_u.eve_d = 0;
// XX must be c3n for cursor backoff from EOL? // XX must be c3n for cursor backoff from EOL?
@ -854,9 +853,6 @@ u3_term_start_spinner(c3_c* why_c, c3_o now_o)
wen_d, _SPIN_RATE_US); wen_d, _SPIN_RATE_US);
} }
} }
else {
c3_free(why_c);
}
} }
/* u3_term_stop_spinner(): reset spinner state and restore input line. /* u3_term_stop_spinner(): reset spinner state and restore input line.
@ -868,8 +864,7 @@ u3_term_stop_spinner(void)
u3_utty* uty_u = _term_main(); u3_utty* uty_u = _term_main();
u3_utat* tat_u = &uty_u->tat_u; u3_utat* tat_u = &uty_u->tat_u;
c3_free(tat_u->sun_u.why_c); memset(tat_u->sun_u.why_c, 0, 5);
tat_u->sun_u.why_c = 0;
uv_timer_stop(&tat_u->sun_u.tim_u); uv_timer_stop(&tat_u->sun_u.tim_u);