leres@ace.ee.lbl.gov (Craig Leres) (08/25/88)
Several people have noticed that when they run the X10.4 xphoon on a
Sun using the -t or -d options, the server eats large chunks of memory.
Appended is a context diff to libsun/bitpix.c which fixes a memory
leak. The basic problem is that the bitmap associated with a pixmap is
lost when a pixmap is freed. (Note that this is true for all pixmaps;
the only reason this bug is more noticable with xphoon is because its
bitmaps are so large.
I've also included a patch to X/main.c which increases MAXBUFSIZE so
that you can load really big bitmaps (for example, screen sized Sun
hi-res bitmaps...) I don't think this patch is necessary for xbigphoon
since it uses the bigcheapmoon, not the bigfullmoon bitmap.
Craig
RCS file: RCS/bitpix.c,v
retrieving revision 1.1
diff -c -r1.1 bitpix.c
*** /tmp/,RCSt1a01315 Wed Aug 24 13:23:21 1988
--- bitpix.c Tue Jun 7 20:14:08 1988
***************
*** 1,5 ****
#ifndef lint
! static char *rcsid_bitpix_c = "$Header: bitpix.c,v 1.1 88/06/07 20:05:09 leres Exp $";
#endif lint
#ifdef sun
/*
--- 1,5 ----
#ifndef lint
! static char *rcsid_bitpix_c = "$Header: bitpix.c,v 1.2 88/06/07 20:13:30 leres Exp $";
#endif lint
#ifdef sun
/*
***************
*** 186,192 ****
FreePixmap (pixmap)
register PIXMAP *pixmap;
{
! switch (pixmap->kind) {
case BitmapPixmap:
{
register BITMAP *bm;
--- 186,192 ----
FreePixmap (pixmap)
register PIXMAP *pixmap;
{
! switch (PTYPE(pixmap)) {
case BitmapPixmap:
{
register BITMAP *bm;
***************
*** 359,365 ****
PIXMAP *pm;
BITMAP *bm;
pm = PixmapSave(srcx, srcy, width, height);
! switch (pm->kind) {
case BitmapPixmap:{
int size = BitmapSize(width, height);
--- 359,365 ----
PIXMAP *pm;
BITMAP *bm;
pm = PixmapSave(srcx, srcy, width, height);
! switch (PTYPE(pm)) {
case BitmapPixmap:{
int size = BitmapSize(width, height);
RCS file: RCS/main.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -c -r1.2 -r1.3
*** /tmp/,RCSt1a01289 Wed Aug 24 13:21:22 1988
--- /tmp/,RCSt2a01289 Wed Aug 24 13:21:23 1988
***************
*** 5,11 ****
/* Initialization and socket routines */
#ifndef lint
! static char *rcsid_main_c = "$Header: main.c,v 1.2 87/10/10 21:09:45 leres Exp $";
#endif
#include <dbm.h>
--- 5,11 ----
/* Initialization and socket routines */
#ifndef lint
! static char *rcsid_main_c = "$Header: main.c,v 1.3 88/05/29 15:36:44 leres Exp $";
#endif
#include <dbm.h>
***************
*** 105,111 ****
int bufcnt[maxsocks]; /* Buffer counts */
/* Count of data bytes available in sockbuf */
#define DEFBUFSIZE 4096 /* Default buffer size */
! #define MAXBUFSIZE (1<<17) /* Maximum buffer size */
static int bufsize[maxsocks]; /* Buffer sizes */
/* Current size in bytes of sockbuf buffer */
#ifdef DUALTCP
--- 105,111 ----
int bufcnt[maxsocks]; /* Buffer counts */
/* Count of data bytes available in sockbuf */
#define DEFBUFSIZE 4096 /* Default buffer size */
! #define MAXBUFSIZE (1<<18) /* Maximum buffer size */
static int bufsize[maxsocks]; /* Buffer sizes */
/* Current size in bytes of sockbuf buffer */
#ifdef DUALTCP