From e2e2ff88aaa7a148da203eeff6e3f6773722a7af Mon Sep 17 00:00:00 2001 From: Jay Sorg Date: Tue, 29 Jun 2004 16:22:41 +0000 Subject: [PATCH] a few fixes for PBC from Jeroen git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@729 423420c4-83ab-492f-b58f-81f9feb106b5 --- cache.c | 12 ++++++++++++ rdesktop.c | 2 +- rdp.c | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/cache.c b/cache.c index 67230c6..b5156c1 100644 --- a/cache.c +++ b/cache.c @@ -32,6 +32,7 @@ int g_num_bitmaps_in_memory[3]; /* BITMAP CACHE */ static BMPCACHEENTRY g_bmpcache[3][0xa00]; +static HBITMAP g_volatile_bc[3]; /* Remove the least-recently used bitmap from the cache */ void @@ -75,6 +76,10 @@ cache_get_bitmap(uint8 cache_id, uint16 cache_idx) return *pbitmap; } } + else if ((cache_id < NUM_ELEMENTS(g_volatile_bc)) && (cache_idx == 0x7fff)) + { + return g_volatile_bc[cache_id]; + } error("get bitmap %d:%d\n", cache_id, cache_idx); return NULL; @@ -102,6 +107,13 @@ cache_put_bitmap(uint8 cache_id, uint16 cache_idx, HBITMAP bitmap, uint32 stamp) g_bmpcache[cache_id][cache_idx].bitmap = bitmap; g_bmpcache[cache_id][cache_idx].usage = stamp; } + else if ((cache_id < NUM_ELEMENTS(g_volatile_bc)) && (cache_idx == 0x7fff)) + { + old = g_volatile_bc[cache_id]; + if (old != NULL) + ui_destroy_bitmap(old); + g_volatile_bc[cache_id] = bitmap; + } else { error("put bitmap %d:%d\n", cache_id, cache_idx); diff --git a/rdesktop.c b/rdesktop.c index fac965d..f59ad7f 100644 --- a/rdesktop.c +++ b/rdesktop.c @@ -720,8 +720,8 @@ main(int argc, char *argv[]) } DEBUG(("Disconnecting...\n")); - cache_save_state(); rdp_disconnect(); + cache_save_state(); ui_deinit(); if (ext_disc_reason >= 2) diff --git a/rdp.c b/rdp.c index 7ff3cad..49ec52c 100644 --- a/rdp.c +++ b/rdp.c @@ -539,7 +539,7 @@ rdp_out_bmpcache2_caps(STREAM s) out_uint16_le(s, RDP_CAPSET_BMPCACHE2); out_uint16_le(s, RDP_CAPLEN_BMPCACHE2); - out_uint16_le(s, g_bitmap_cache_persist_enable ? 1 : 0); /* version */ + out_uint16_le(s, g_bitmap_cache_persist_enable ? 2 : 0); /* version */ out_uint16_le(s, 0x0300); /* flags? number of caches? */