thanks for that. I've cheated a bit, I'm still using Webware-0.9.1. When
trying to upgrade my Application to Webware-0.9.2, I realized that the
Application breaks. I'll need to investigate this first (I'm using a
homegrown JSONRpc Handler). Alternativly, I could change my
Webware-0.9.1 according to your suggestions.
I'll definatelly get back to you about this.
Christoph Zwerschke wrote:
> Stephan Diehl schrieb:
>> I'm a longtime user of WebWare. I just stumbled over some pretty
>> strange problem. The Application running on Webware is a kind of
>> Document Management system that can contain quite huge files (ISO
>> images). When somebody is downloading such a file and cancels the
>> download, the application eats up more and more memory. It looks like
>> the application tries to deliver the content, but, instead of
>> delivering it to the client (who's not longer there), caches
>> everything in memory. This is the newest version of WebWare.
> > I've done the following change:
> > In WebKit/ThreadedAppServer.py
> > 741 def flush(self):
> > 742 """Flush stream.
> > ...
> > 753 while sent < reslen:
> > 754 try:
> > 755 sent += self._socket.send(
> > 756 self._buffer[sent:sent+8192])
> > 757 except socket.error, e:
> > 758 if e == errno.EPIPE: # broken pipe
> > 759 pass
> > 760 elif hasattr(errno, 'ECONNRESET') \
> > 761 and e == errno.ECONNRESET:
> > 762 pass
> > 763 else:
> > 764 print "StreamOut Error: ", e
> > 765 break
> > 766 self.pop(sent)
> > I've changed line 759 from 'pass' to 'raise', which now gives ugly
> > tracebacks in the logs, but other than that, does what should happen
> > anyway: cancel the download.
> Hi Stephan,
> thanks for the bug report. I think you're right, this is a problem.
> By the way, on Windows you get an ECONNABORTED error in the same
> situation, not an EPIPE error. So I think ECONNABORTED should be treated
> the same way as the other two errors in the flush method.
> For a fix of the problem, I suggest the following:
> In ASSStreamOut.py:
> Above the definition of the ASStreamOut class, insert:
> class ConnectionAbortedError(Exception):
> Below, replace the 2 lines beginning:
> assert not self._closed, ...
> if self._closed: raise ConnectionAbortedError
> In ThreadedAppServer.py:
> Above the definition of the ThreadedAppServer class, insert:
>>from ASStreamOut import ConnectionAbortedError
> In the TASASStreamOut.flush() method, insert this line
> before the break statement:
> self._closed = True
> To avoid the ugly tracebacks, insert the following lines between
> the call of handler.handleRequest() and the following except:,
> indented with the correct amount (both "excepts" on the same level):
> except ConnectionAbortedError:
> if self._verbose:
> sys.stdout.write('%5i %s connection aborted\n'
> % (handler._requestID, timestamp()['pretty']))
> If you confirm that this fixes your problems and nobody disagrees, I
> will fix it this way in the trunk.
> > P.S.: I know this is quite a political issue, but is there a chance to
> > change from tabs to spaces in Webware code?
> I think this question should go directly to Chuck, our BDFL who had been
> strongly against this in the past. I vote for a change as well.
> -- Christoph
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
> Webware-discuss mailing list