Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | [Bug 2946474] Consistently resume backgrounded flushes+closes when exiting. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
1025712d5b1e7510c8ab10aed32d7bab |
User & Date: | ferrieux 2011-08-17 20:35:19 |
Context
2011-08-18
| ||
11:31 | [Bug 3393714] overflow in toupper delta check-in: 546b53b387 user: jan.nijtmans tags: trunk | |
2011-08-17
| ||
20:35 | [Bug 2946474] Consistently resume backgrounded flushes+closes when exiting. check-in: 1025712d5b user: ferrieux tags: trunk | |
18:33 | Document TIP 378's one-way-ness. check-in: 2fd6414812 user: ferrieux tags: trunk | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2011-08-17 Alexandre Ferrieux <[email protected]> * doc/interp.n: Document TIP 378's one-way-ness. 2011-08-17 Don Porter <[email protected]> * generic/tclGet.c: [Bug 3393150] Overlooked free of intreps. | > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | 2011-08-17 Alexandre Ferrieux <[email protected]> * generic/tclIO.c: [Bug 2946474] Consistently resume backgrounded * tests/ioCmd.test: flushes+closes when exiting. 2011-08-17 Alexandre Ferrieux <[email protected]> * doc/interp.n: Document TIP 378's one-way-ness. 2011-08-17 Don Porter <[email protected]> * generic/tclGet.c: [Bug 3393150] Overlooked free of intreps. |
︙ | ︙ |
Changes to generic/tclIO.c.
︙ | ︙ | |||
410 411 412 413 414 415 416 | */ active = 0; for (statePtr = tsdPtr->firstCSPtr; statePtr != NULL; statePtr = statePtr->nextCSPtr) { chanPtr = statePtr->topChanPtr; | | | | 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 | */ active = 0; for (statePtr = tsdPtr->firstCSPtr; statePtr != NULL; statePtr = statePtr->nextCSPtr) { chanPtr = statePtr->topChanPtr; if (!GotFlag(statePtr, CHANNEL_INCLOSE | CHANNEL_CLOSED | CHANNEL_DEAD) || GotFlag(statePtr, BG_FLUSH_SCHEDULED)) { active = 1; break; } } /* * We've found a live channel. Close it. |
︙ | ︙ | |||
454 455 456 457 458 459 460 461 462 463 464 465 466 467 | (void) Tcl_Close(NULL, (Tcl_Channel) chanPtr); } else { /* * The refcount is greater than zero, so flush the channel. */ Tcl_Flush((Tcl_Channel) chanPtr); /* * Call the device driver to actually close the underlying * device for this channel. */ | > | 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 | (void) Tcl_Close(NULL, (Tcl_Channel) chanPtr); } else { /* * The refcount is greater than zero, so flush the channel. */ ResetFlag(statePtr, BG_FLUSH_SCHEDULED); Tcl_Flush((Tcl_Channel) chanPtr); /* * Call the device driver to actually close the underlying * device for this channel. */ |
︙ | ︙ |
Changes to tests/ioCmd.test.
︙ | ︙ | |||
2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 | close $c notes } c] set res } -cleanup { rename foo {} unset res } -result {{write rc* ABC} {watch rc* write} {}} \ -constraints {testchannel testthread} # --- === *** ########################### # method cgetall test iocmd.tf-25.1 {chan configure, cgetall, standard options} -match glob -body { set res {} proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 | close $c notes } c] set res } -cleanup { rename foo {} unset res update } -result {{write rc* ABC} {watch rc* write} {}} \ -constraints {testchannel testthread} test iocmd.tf-24.16 {chan write, note the background flush setup by close due to the EAGAIN leaving data in buffers.} -match glob -setup { set res {} proc foo {args} { oninit; onfinal; track # Note: The EAGAIN signals that the channel cannot accept # write requests right now, this in turn causes the IO core to # request the generation of writable events (see expected # result below, and compare to case 24.14 above). error EAGAIN } set c [chan create {r w} foo] } -body { notes [inthread $c { note [puts -nonewline $c ABC ; flush $c] close $c notes } c] # Replace handler with all-tracking one which doesn't error. # This will tell us if a write-due-flush is there. proc foo {args} { note BG ; track } # Flush (sic!) the event-queue to capture the write from a # BG-flush. update set res } -cleanup { rename foo {} unset res } -result {{write rc* ABC} {watch rc* write} {} BG {write rc* ABC}} \ -constraints {testchannel testthread} # --- === *** ########################### # method cgetall test iocmd.tf-25.1 {chan configure, cgetall, standard options} -match glob -body { set res {} proc foo {args} {oninit; onfinal; track; note MUST_NOT_HAPPEN; return} |
︙ | ︙ |