Tcl Source Code

View Ticket
Login
2012-05-23
21:35 Closed ticket [3525907fff]: zlib push decompress doesn't work with fileevent readabl plus 7 other changes artifact: b4d88d5bc5 user: dkf
2012-05-21
03:52 Ticket [3525907fff]: 4 changes artifact: beede78bef user: ferrieux
2012-05-19
20:15 Ticket [3525907fff]: 4 changes artifact: d1e881aab5 user: dkf
2012-05-18
12:16 Ticket [3525907fff]: 4 changes artifact: 4d4254d8a6 user: teopetuk
04:47 Ticket [3525907fff]: 4 changes artifact: b4d269cf4c user: andreas_kupries
04:31 Ticket [3525907fff]: 4 changes artifact: 12646cd9ac user: andreas_kupries
04:30 Add attachment zlib-reworked-without-instrumentation.patch to ticket [3525907fff] artifact: 6591dcff86 user: andreas_kupries
04:30 Ticket [3525907fff] zlib push decompress doesn't work with fileevent readabl status still Open with 4 other changes artifact: 75e2578044 user: andreas_kupries
2012-05-17
01:21 Ticket [3525907fff]: 4 changes artifact: dcb1a738ea user: andreas_kupries
2012-05-13
22:31 Ticket [3525907fff]: 5 changes artifact: a9bd355b04 user: ferrieux
2012-05-12
00:29 Add attachment zlibtest2.tcl to ticket [3525907fff] artifact: a6d3425344 user: teopetuk
00:29 Ticket [3525907fff] zlib push decompress doesn't work with fileevent readabl status still Open with 4 other changes artifact: 476d0ca368 user: teopetuk
00:27 Ticket [3525907fff]: 4 changes artifact: f28e4daa42 user: teopetuk
00:27 Add attachment zlibtest1.tcl to ticket [3525907fff] artifact: a3fa0c8d60 user: teopetuk
2012-05-11
17:27 New ticket [3525907fff] zlib push decompress doesn't work with fileevent readabl. artifact: f46a576bbe user: teopetuk

Ticket UUID: 3525907
Title: [zlib push decompress] doesn't work with [fileevent readabl]
Type: Bug Version: obsolete: 8.6b2
Submitter: teopetuk Created on: 2012-05-11 17:27:33
Subsystem: 57. zlib Assigned To: dkf
Priority: 9 Immediate Severity:
Status: Closed Last Modified: 2012-05-23 21:35:14
Resolution: Fixed Closed By: dkf
    Closed on: 2012-05-23 14:35:14
Description:
Hi!

I've tried to use [zlib push decompress] on an unblocked network channel and found that it doesn't read from the channel if it isn't closed by the peer. In the attached script the server part puts two strings into a compressed channel (one immediately and the other after 5 second delay). Apparently, the client side readable fileevent fires many times during these 5 seconds but [read $chan] returns empty string every time. After the finishing [close] the client reads and reports the message (but only the second one!).

I would expect the both messages were printed.

Currently, I can use a separate [zlib stream decompress] and read the raw bytes from the channel, but I don't think that it's a perfect solution.
User Comments: dkf added on 2012-05-23 21:35:14:

allow_comments - 1

Thanks to everyone who worked on this; fix merged to trunk

ferrieux added on 2012-05-21 03:52:54:
Test committed to the branch.

dkf added on 2012-05-19 20:15:11:
Having looked at https://core.tcl.tk/tcl/vdiff?from=ba6087ec84&to=c003b262df77ede3
It looks reasonable. (I'll want to tinker with it after merger to reduce the apparent complexity, but I'll not cause this fix to be delayed for that.)

Before commit back, do we have a test for this yet?

teopetuk added on 2012-05-18 12:16:31:
I confirm that after the applying the attached patch the bug is gone.

andreas_kupries added on 2012-05-18 04:47:42:
Committed change to branch bug-3525907, rev. 5ffc93920daf1775e96132f6fd826e735d84028b and descendants.

andreas_kupries added on 2012-05-18 04:31:13:
The attached patch seems to fix the issues, and passes the testsuite for me.
Please test.

andreas_kupries added on 2012-05-18 04:30:28:

File Added - 443826: zlib-reworked-without-instrumentation.patch

andreas_kupries added on 2012-05-17 01:21:30:
Moving the 

   chan configure $chan -flush sync

before the puts of the first message (still after the zlib transform is pushed) gets us both messages on the receiver side. I.e. no loss of bytes anymore. It still receives them only when the channel is closed.

I suspect that the "-flush sync" (is intended to) activate(s) the special zlib flush code forcing out the data buffered in the zlib transform without ending the zlib stream.

This part doesn't seem to work correctly.

ferrieux added on 2012-05-13 22:31:44:
I confirm both the strange disappearance of the bytes written before [-flush sync], and a worrisome level of syscall activity during all the 5 seconds of what should be a completely quiescent delay. Clearly, continued exchanges between the notifier and main thread occur, with a period of 7 ms. Looks like a "tamed busy loop", but I don't like it :/

teopetuk added on 2012-05-12 00:29:03:

File Added - 443236: zlibtest2.tcl

teopetuk added on 2012-05-12 00:27:35:

File Added - 443234: zlibtest1.tcl

Attachments: