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? */