summaryrefslogtreecommitdiffstats
path: root/libvncserver/ultra.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvncserver/ultra.c')
-rw-r--r--libvncserver/ultra.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/libvncserver/ultra.c b/libvncserver/ultra.c
index 1e51446..a802026 100644
--- a/libvncserver/ultra.c
+++ b/libvncserver/ultra.c
@@ -23,7 +23,7 @@ static char *lzoBeforeBuf = NULL;
static int lzoAfterBufSize = 0;
static char *lzoAfterBuf = NULL;
-static int lzoAfterBufLen;
+static int lzoAfterBufLen = 0;
/*
* rfbSendOneRectEncodingZlib - send a given rectangle using one Zlib
@@ -32,6 +32,26 @@ static int lzoAfterBufLen;
#define MAX_WRKMEM ((LZO1X_1_MEM_COMPRESS) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t)
+void rfbUltraCleanup(rfbScreenInfoPtr screen)
+{
+ if (lzoBeforeBufSize) {
+ free(lzoBeforeBuf);
+ lzoBeforeBufSize=0;
+ }
+ if (lzoAfterBufSize) {
+ free(lzoAfterBuf);
+ lzoAfterBufSize=0;
+ }
+}
+
+void rfbFreeUltraData(rfbClientPtr cl) {
+ if (cl->compStreamInitedLZO) {
+ free(cl->lzoWrkMem);
+ cl->compStreamInitedLZO=FALSE;
+ }
+}
+
+
static rfbBool
rfbSendOneRectEncodingUltra(rfbClientPtr cl,
int x,
@@ -125,6 +145,7 @@ rfbSendOneRectEncodingUltra(rfbClientPtr cl,
memcpy(&cl->updateBuf[cl->ublen], (char *)&hdr, sz_rfbZlibHeader);
cl->ublen += sz_rfbZlibHeader;
+ /* We might want to try sending the data directly... */
for (i = 0; i < lzoAfterBufLen;) {
int bytesToCopy = UPDATE_BUF_SIZE - cl->ublen;