Commit f0ae515
committed
Fix terminal resize race conditions
The runebuf, search and complete data structures all maintain their
own cache of the terminal width and height. When the terminal is
resized, a signal is sent to a go routine which calls a function
that sets the new width and height to each data structure instance.
However, this races with the main thread reading the sizes.
Instead of introducing more locks, it makes sense that the terminal
itself caches it's width and height and the other structures just
get it as necessary. This removes all the racing.
As part of this change, search, complete and runebuf constructor
changes to no longer require the initial sizes. Also each structure
needs a reference to the Terminal so they can get the width/height.
As the io.Writer parameter is actually the terminal anyway, the
simpliest option was just to change the type from the io.Writer to
Terminal. I don't believe that anyone would be calling these
functions directly so the signature changes should be ok. I also
removed the no longer used OnWidthChange() and OnSizeChange()
functions from these three structures.1 parent 4fda9f0 commit f0ae515
5 files changed
Lines changed: 75 additions & 96 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | 7 | | |
9 | 8 | | |
10 | 9 | | |
| |||
25 | 24 | | |
26 | 25 | | |
27 | 26 | | |
28 | | - | |
| 27 | + | |
29 | 28 | | |
30 | | - | |
31 | | - | |
32 | 29 | | |
33 | 30 | | |
34 | 31 | | |
| |||
42 | 39 | | |
43 | 40 | | |
44 | 41 | | |
45 | | - | |
| 42 | + | |
46 | 43 | | |
47 | 44 | | |
48 | 45 | | |
49 | | - | |
50 | | - | |
51 | 46 | | |
52 | 47 | | |
53 | 48 | | |
| |||
73 | 68 | | |
74 | 69 | | |
75 | 70 | | |
76 | | - | |
| 71 | + | |
| 72 | + | |
77 | 73 | | |
78 | 74 | | |
79 | 75 | | |
| |||
103 | 99 | | |
104 | 100 | | |
105 | 101 | | |
106 | | - | |
| 102 | + | |
107 | 103 | | |
108 | 104 | | |
109 | 105 | | |
| |||
246 | 242 | | |
247 | 243 | | |
248 | 244 | | |
249 | | - | |
250 | | - | |
251 | | - | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | | - | |
256 | | - | |
257 | | - | |
258 | 245 | | |
259 | 246 | | |
260 | 247 | | |
| |||
270 | 257 | | |
271 | 258 | | |
272 | 259 | | |
| 260 | + | |
| 261 | + | |
273 | 262 | | |
274 | | - | |
| 263 | + | |
275 | 264 | | |
276 | 265 | | |
277 | 266 | | |
| |||
283 | 272 | | |
284 | 273 | | |
285 | 274 | | |
| 275 | + | |
286 | 276 | | |
287 | | - | |
| 277 | + | |
288 | 278 | | |
289 | 279 | | |
290 | 280 | | |
| |||
299 | 289 | | |
300 | 290 | | |
301 | 291 | | |
302 | | - | |
303 | | - | |
304 | | - | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
305 | 295 | | |
306 | 296 | | |
307 | 297 | | |
| |||
326 | 316 | | |
327 | 317 | | |
328 | 318 | | |
| 319 | + | |
329 | 320 | | |
330 | 321 | | |
331 | 322 | | |
| |||
334 | 325 | | |
335 | 326 | | |
336 | 327 | | |
337 | | - | |
| 328 | + | |
338 | 329 | | |
339 | 330 | | |
340 | 331 | | |
341 | 332 | | |
342 | | - | |
343 | | - | |
| 333 | + | |
| 334 | + | |
344 | 335 | | |
345 | 336 | | |
346 | 337 | | |
| |||
403 | 394 | | |
404 | 395 | | |
405 | 396 | | |
406 | | - | |
| 397 | + | |
407 | 398 | | |
408 | 399 | | |
409 | 400 | | |
410 | 401 | | |
| 402 | + | |
411 | 403 | | |
412 | 404 | | |
413 | 405 | | |
414 | 406 | | |
415 | 407 | | |
416 | 408 | | |
417 | 409 | | |
418 | | - | |
419 | | - | |
420 | | - | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
421 | 413 | | |
422 | 414 | | |
423 | 415 | | |
424 | | - | |
| 416 | + | |
425 | 417 | | |
426 | 418 | | |
427 | 419 | | |
| |||
460 | 452 | | |
461 | 453 | | |
462 | 454 | | |
463 | | - | |
| 455 | + | |
| 456 | + | |
464 | 457 | | |
465 | 458 | | |
466 | 459 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | | - | |
71 | 70 | | |
72 | 71 | | |
73 | | - | |
| 72 | + | |
74 | 73 | | |
75 | 74 | | |
76 | 75 | | |
77 | 76 | | |
78 | 77 | | |
79 | 78 | | |
80 | | - | |
| 79 | + | |
81 | 80 | | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
| 81 | + | |
88 | 82 | | |
89 | 83 | | |
90 | 84 | | |
| |||
410 | 404 | | |
411 | 405 | | |
412 | 406 | | |
413 | | - | |
| 407 | + | |
414 | 408 | | |
415 | 409 | | |
416 | 410 | | |
| |||
494 | 488 | | |
495 | 489 | | |
496 | 490 | | |
497 | | - | |
498 | 491 | | |
499 | 492 | | |
500 | 493 | | |
501 | 494 | | |
502 | | - | |
| 495 | + | |
503 | 496 | | |
504 | 497 | | |
505 | 498 | | |
506 | 499 | | |
507 | 500 | | |
508 | 501 | | |
509 | 502 | | |
510 | | - | |
511 | | - | |
| 503 | + | |
| 504 | + | |
512 | 505 | | |
513 | 506 | | |
514 | 507 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | 26 | | |
30 | 27 | | |
31 | 28 | | |
| |||
40 | 37 | | |
41 | 38 | | |
42 | 39 | | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | 40 | | |
57 | 41 | | |
58 | 42 | | |
| |||
69 | 53 | | |
70 | 54 | | |
71 | 55 | | |
72 | | - | |
| 56 | + | |
73 | 57 | | |
74 | 58 | | |
75 | 59 | | |
76 | 60 | | |
77 | | - | |
78 | | - | |
79 | 61 | | |
80 | 62 | | |
81 | 63 | | |
| |||
102 | 84 | | |
103 | 85 | | |
104 | 86 | | |
105 | | - | |
106 | | - | |
107 | | - | |
| 87 | + | |
| 88 | + | |
108 | 89 | | |
109 | 90 | | |
110 | 91 | | |
| |||
448 | 429 | | |
449 | 430 | | |
450 | 431 | | |
| 432 | + | |
451 | 433 | | |
452 | 434 | | |
453 | 435 | | |
454 | | - | |
| 436 | + | |
455 | 437 | | |
456 | | - | |
| 438 | + | |
457 | 439 | | |
458 | 440 | | |
459 | 441 | | |
| |||
476 | 458 | | |
477 | 459 | | |
478 | 460 | | |
479 | | - | |
| 461 | + | |
| 462 | + | |
480 | 463 | | |
481 | 464 | | |
482 | 465 | | |
| |||
506 | 489 | | |
507 | 490 | | |
508 | 491 | | |
509 | | - | |
| 492 | + | |
510 | 493 | | |
511 | 494 | | |
512 | 495 | | |
| |||
517 | 500 | | |
518 | 501 | | |
519 | 502 | | |
520 | | - | |
| 503 | + | |
521 | 504 | | |
522 | 505 | | |
523 | 506 | | |
| |||
528 | 511 | | |
529 | 512 | | |
530 | 513 | | |
531 | | - | |
532 | | - | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
533 | 517 | | |
534 | 518 | | |
535 | 519 | | |
| |||
703 | 687 | | |
704 | 688 | | |
705 | 689 | | |
706 | | - | |
| 690 | + | |
| 691 | + | |
707 | 692 | | |
708 | 693 | | |
709 | 694 | | |
| |||
724 | 709 | | |
725 | 710 | | |
726 | 711 | | |
727 | | - | |
| 712 | + | |
| 713 | + | |
728 | 714 | | |
729 | 715 | | |
730 | 716 | | |
| |||
0 commit comments