summaryrefslogtreecommitdiffstats
path: root/xrdp/xrdp_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'xrdp/xrdp_cache.c')
-rw-r--r--xrdp/xrdp_cache.c63
1 files changed, 32 insertions, 31 deletions
diff --git a/xrdp/xrdp_cache.c b/xrdp/xrdp_cache.c
index 20445b63..f9df7ad5 100644
--- a/xrdp/xrdp_cache.c
+++ b/xrdp/xrdp_cache.c
@@ -1,4 +1,3 @@
-
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -60,11 +59,12 @@ int xrdp_cache_add_bitmap(struct xrdp_cache* self, struct xrdp_bitmap* bitmap)
{
int i;
int j;
- int min_use;
+ int oldest;
int cache_id;
int cache_idx;
struct xrdp_bitmap* b;
+ self->bitmap_stamp++;
/* look for match */
for (i = 0; i < 3; i++)
{
@@ -72,35 +72,35 @@ int xrdp_cache_add_bitmap(struct xrdp_cache* self, struct xrdp_bitmap* bitmap)
{
if (xrdp_bitmap_compare(self->bitmap_items[i][j].bitmap, bitmap))
{
- self->bitmap_items[i][j].use_count++;
- DEBUG(("found bitmap at %d %d\n", i, j));
+ self->bitmap_items[i][j].stamp = self->bitmap_stamp;
+ DEBUG(("found bitmap at %d %d\n\r", i, j));
return MAKELONG(i, j);
}
}
}
- /* look for least used */
+ /* look for oldest */
cache_id = 0;
cache_idx = 0;
- min_use = 999999;
+ oldest = 0x7fffffff;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 600; j++)
{
- if (self->bitmap_items[i][j].use_count < min_use)
+ if (self->bitmap_items[i][j].stamp < oldest)
{
- min_use = self->bitmap_items[i][j].use_count;
+ oldest = self->bitmap_items[i][j].stamp;
cache_id = i;
cache_idx = j;
}
}
}
- DEBUG(("adding bitmap at %d %d\n", cache_id, cache_idx));
+ DEBUG(("adding bitmap at %d %d\n\r", cache_id, cache_idx));
/* set, send bitmap and return */
xrdp_bitmap_delete(self->bitmap_items[cache_id][cache_idx].bitmap);
b = xrdp_bitmap_create(bitmap->width, bitmap->height, bitmap->bpp, 0);
xrdp_bitmap_copy_box(bitmap, b, 0, 0, bitmap->width, bitmap->height);
self->bitmap_items[cache_id][cache_idx].bitmap = b;
- self->bitmap_items[cache_id][cache_idx].use_count++;
+ self->bitmap_items[cache_id][cache_idx].stamp = self->bitmap_stamp;
xrdp_orders_send_raw_bitmap(self->orders, b, cache_id, cache_idx);
return MAKELONG(cache_id, cache_idx);
}
@@ -109,8 +109,8 @@ int xrdp_cache_add_bitmap(struct xrdp_cache* self, struct xrdp_bitmap* bitmap)
int xrdp_cache_add_palette(struct xrdp_cache* self, int* palette)
{
int i;
- int min_use;
- int min_use_index;
+ int oldest;
+ int index;
if (self == 0)
return 0;
@@ -118,33 +118,33 @@ int xrdp_cache_add_palette(struct xrdp_cache* self, int* palette)
return 0;
if (self->wm->screen->bpp > 8)
return 0;
+ self->palette_stamp++;
/* look for match */
for (i = 0; i < 6; i++)
{
if (g_memcmp(palette, self->palette_items[i].palette,
256 * sizeof(int)) == 0)
{
- self->palette_items[i].use_count++;
+ self->palette_items[i].stamp = self->palette_stamp;
return i;
}
}
- /* look for least used */
- min_use_index = 0;
- min_use = 999999;
+ /* look for oldest */
+ index = 0;
+ oldest = 0x7fffffff;
for (i = 0; i < 6; i++)
{
- if (self->palette_items[i].use_count < min_use)
+ if (self->palette_items[i].stamp < oldest)
{
- min_use = self->palette_items[i].use_count;
- min_use_index = i;
+ oldest = self->palette_items[i].stamp;
+ index = i;
}
}
/* set, send palette and return */
- g_memcpy(self->palette_items[min_use_index].palette, palette,
- 256 * sizeof(int));
- self->palette_items[min_use_index].use_count++;
- xrdp_orders_send_palette(self->orders, palette, min_use_index);
- return min_use_index;
+ g_memcpy(self->palette_items[index].palette, palette, 256 * sizeof(int));
+ self->palette_items[index].stamp = self->palette_stamp;
+ xrdp_orders_send_palette(self->orders, palette, index);
+ return index;
}
/*****************************************************************************/
@@ -153,12 +153,13 @@ int xrdp_cache_add_char(struct xrdp_cache* self,
{
int i;
int j;
- int min_use;
+ int oldest;
int f;
int c;
int datasize;
struct xrdp_font_item* fi;
+ self->char_stamp++;
/* look for match */
for (i = 7; i < 12; i++)
{
@@ -166,23 +167,23 @@ int xrdp_cache_add_char(struct xrdp_cache* self,
{
if (xrdp_font_item_compare(&self->char_items[i][j].font_item, font_item))
{
- self->char_items[i][j].use_count++;
+ self->char_items[i][j].stamp = self->char_stamp;
DEBUG(("found font at %d %d\n\r", i, j));
return MAKELONG(i, j);
}
}
}
- /* look for least used */
+ /* look for oldest */
f = 0;
c = 0;
- min_use = 999999;
+ oldest = 0x7fffffff;
for (i = 7; i < 12; i++)
{
for (j = 0; j < 250; j++)
{
- if (self->char_items[i][j].use_count < min_use)
+ if (self->char_items[i][j].stamp < oldest)
{
- min_use = self->char_items[i][j].use_count;
+ oldest = self->char_items[i][j].stamp;
f = i;
c = j;
}
@@ -199,7 +200,7 @@ int xrdp_cache_add_char(struct xrdp_cache* self,
fi->baseline = font_item->baseline;
fi->width = font_item->width;
fi->height = font_item->height;
- self->char_items[f][c].use_count++;
+ self->char_items[f][c].stamp = self->char_stamp;
xrdp_orders_send_font(self->orders, fi, f, c);
return MAKELONG(f, c);
}