wdc@ATHENA.MIT.EDU (Bill Cattey) (03/22/90)
Forgive this large posting to the whole group, but having been in the position of debugging X servers, I appreciate the need to WIDELY publicise bug fixes. Todd: Your work in finding the leak has not been wasted! I showed your message around to my friends here and they saw this on the fix-trackers mailing list and forwarded it to me. Lookey lookey! A whole slew of memory leaks plugged in the server. Share and enjoy, -wdc Received: by E40-PO.MIT.EDU (5.45/4.7) id AA10886; Wed, 21 Mar 90 23:09:23 EST Received: from ACHATES.MIT.EDU by ATHENA.MIT.EDU with SMTP id AA13225; Wed, 21 Mar 90 23:09:20 EST Received: by ACHATES.MIT.EDU (5.61) id AA00828; Wed, 21 Mar 90 23:03:35 -0500 Message-Id: <9003220403.AA00828@ACHATES.MIT.EDU> To: wdc@ATHENA.MIT.EDU Subject: (seq: 775) close XBUG #2765: server memory leak Date: Wed, 21 Mar 90 23:03:34 EST From: John Carr <jfc@ATHENA.MIT.EDU> [0684] daemon@ATHENA.MIT.EDU X11R4_Server_Development 03/21/90 10:34 (318 lines) Subject: (seq: 775) close XBUG #2765: server memory leak To: fix-trackers@expo.lcs.mit.edu Date: Wed, 21 Mar 90 10:30:37 -0500 From: rws@expo.lcs.mit.edu (Bob Scheifler) ### bug number: 2765 ### area: server ### severity: medium high ### comments: Files: server/ddx/mfb/mfbgc.c server/ddx/cfb/cfbgc.c server/ddx/apollo/apc/apcgc.c server/ddx/dec/qdss/qdgc.c server/ddx/ibm/aed/aedGC.c server/ddx/ibm/apa16/apa16GC.c *** /tmp/,RCSt1a03549 Wed Mar 21 10:20:49 1990 --- server/ddx/mfb/mfbgc.c Tue Mar 20 14:49:16 1990 *************** *** 21,27 **** SOFTWARE. ******************************************************************/ ! /* $XConsortium: mfbgc.c,v 5.18 89/11/29 19:53:27 rws Exp $ */ #include "X.h" #include "Xmd.h" #include "Xproto.h" --- 21,27 ---- SOFTWARE. ******************************************************************/ ! /* $XConsortium: mfbgc.c,v 5.19 90/03/20 14:48:59 rws Exp $ */ #include "X.h" #include "Xmd.h" #include "Xproto.h" *************** *** 420,441 **** Mask changes; GCPtr pGCDst; { ! RegionPtr pClip; ! ! if(changes & GCClipMask) ! { ! if(pGCDst->clientClipType == CT_PIXMAP) ! { ! ((PixmapPtr)pGCDst->clientClip)->refcnt++; ! } ! else if(pGCDst->clientClipType == CT_REGION) ! { ! pClip = (RegionPtr) pGCDst->clientClip; ! pGCDst->clientClip = ! (pointer)(* pGCDst->pScreen->RegionCreate)(NULL, 1); ! (* pGCDst->pScreen->RegionCopy)(pGCDst->clientClip, pClip); ! } ! } } void --- 420,426 ---- Mask changes; GCPtr pGCDst; { ! return; } void *** /tmp/,RCSt1a03563 Wed Mar 21 10:21:35 1990 --- server/ddx/cfb/cfbgc.c Wed Mar 21 10:21:38 1990 *************** *** 22,28 **** ******************************************************************/ ! /* $XConsortium: cfbgc.c,v 5.32 89/11/29 19:53:03 rws Exp $ */ #include "X.h" #include "Xmd.h" --- 22,28 ---- ******************************************************************/ ! /* $XConsortium: cfbgc.c,v 5.32.1.1 90/03/21 10:16:47 rws Exp $ */ #include "X.h" #include "Xmd.h" *************** *** 798,824 **** Mask changes; GCPtr pGCDst; { ! RegionPtr pClip; ! ! if(changes & GCClipMask) ! { ! if(pGCDst->clientClipType == CT_PIXMAP) ! { ! ((PixmapPtr)pGCDst->clientClip)->refcnt++; ! } ! else if(pGCDst->clientClipType == CT_REGION) ! { ! BoxRec pixbounds; ! ! pixbounds.x1 = 0; ! pixbounds.y1 = 0; ! pixbounds.x2 = 0; ! pixbounds.y2 = 0; ! ! pClip = (RegionPtr) pGCDst->clientClip; ! pGCDst->clientClip = ! (pointer)(* pGCDst->pScreen->RegionCreate)(&pixbounds, 1); ! (* pGCDst->pScreen->RegionCopy)(pGCDst->clientClip, pClip); ! } ! } } --- 798,802 ---- Mask changes; GCPtr pGCDst; { ! return; } *** /tmp/,RCSt1a03579 Wed Mar 21 10:23:04 1990 --- server/ddx/apollo/apc/apcgc.c Wed Mar 21 09:59:01 1990 *************** *** 25,31 **** University of California. ******************************************************************/ ! /* $XConsortium: apcgc.c,v 1.3 90/02/22 10:43:29 rws Exp $ */ #include "apc.h" #include "Xmd.h" --- 25,31 ---- University of California. ******************************************************************/ ! /* $XConsortium: apcgc.c,v 1.4 90/03/21 09:58:39 rws Exp $ */ #include "apc.h" #include "Xmd.h" *************** *** 132,138 **** /* * apcCopyGC -- DDX interface (GC "funcs") ! * Copy client clip info when copying a GC. */ static void apcCopyGC (pGCSrc, changes, pGCDst) --- 132,138 ---- /* * apcCopyGC -- DDX interface (GC "funcs") ! * Nothing to do. */ static void apcCopyGC (pGCSrc, changes, pGCDst) *************** *** 140,160 **** Mask changes; GCPtr pGCDst; { - RegionPtr pClip; - - if (changes & GCClipMask) - { - if (pGCDst->clientClipType == CT_PIXMAP) - { - ((PixmapPtr)pGCDst->clientClip)->refcnt++; - } - else if (pGCDst->clientClipType == CT_REGION) - { - pClip = (RegionPtr) pGCDst->clientClip; - pGCDst->clientClip = (pointer)(* pGCDst->pScreen->RegionCreate)(NULL, 1); - (* pGCDst->pScreen->RegionCopy)(pGCDst->clientClip, pClip); - } - } } /* --- 140,145 ---- *** /tmp/,RCSt1a03598 Wed Mar 21 10:24:21 1990 --- server/ddx/dec/qdss/qdgc.c Wed Mar 21 10:03:20 1990 *************** *** 358,375 **** int maskQ; GCPtr pgcSrc; { ! #ifdef X11R4 ! if (maskQ & GCClipMask) { ! if (pgcDst->clientClipType == CT_PIXMAP) ! ((PixmapPtr)pgcDst->clientClip)->refcnt++; ! else if (pgcDst->clientClipType == CT_REGION) { ! RegionPtr pClip = (RegionPtr) pgcDst->clientClip; ! pgcDst->clientClip = ! (pointer)(* pgcDst->pScreen->RegionCreate)(NULL, 1); ! (* pgcDst->pScreen->RegionCopy)(pgcDst->clientClip, pClip); ! } ! } ! #else RegionPtr pregionsrc = (RegionPtr) pgcSrc->clientClip; if ( ! (maskQ & GCClipMask) --- 358,364 ---- int maskQ; GCPtr pgcSrc; { ! #ifndef X11R4 RegionPtr pregionsrc = (RegionPtr) pgcSrc->clientClip; if ( ! (maskQ & GCClipMask) *** /tmp/,RCSt1a03602 Wed Nov 29 16:33:34 1989 --- server/ddx/ibm/aed/aedGC.c Wed Mar 21 09:55:11 1990 *************** *** 43,49 **** SOFTWARE. ******************************************************************/ ! /* $Header: /afs/testers.athena.mit.edu/src/x11r4/src/mit/server/ddx/ibm/aed/RCS/aedGC.c,v 1.3 89/11/29 16:26:40 jfc Exp Locker: jfc $ */ #include "X.h" #include "Xproto.h" #include "Xmd.h" --- 43,49 ---- SOFTWARE. ******************************************************************/ ! /* $XConsortium: aedGC.c,v 1.4 90/03/21 09:54:58 rws Exp $ */ #include "X.h" #include "Xproto.h" #include "Xmd.h" *************** *** 267,288 **** Mask changes; GCPtr pGCDst; { ! RegionPtr pClip; ! ! if(changes & GCClipMask) ! { ! if(pGCDst->clientClipType == CT_PIXMAP) ! { ! ((PixmapPtr)pGCDst->clientClip)->refcnt++; ! } ! else if(pGCDst->clientClipType == CT_REGION) ! { ! pClip = (RegionPtr) pGCDst->clientClip; ! pGCDst->clientClip = ! (pointer)(* pGCDst->pScreen->RegionCreate)(NULL, 1); ! (* pGCDst->pScreen->RegionCopy)(pGCDst->clientClip, pClip); ! } ! } } struct commonOps { --- 267,273 ---- Mask changes; GCPtr pGCDst; { ! return; } struct commonOps { *** /tmp/,RCSt1a03623 Wed Mar 21 10:26:47 1990 --- server/ddx/ibm/apa16/apa16GC.c Wed Mar 21 09:50:35 1990 *************** *** 66,72 **** SOFTWARE. ******************************************************************/ ! /* $XConsortium: apa16GC.c,v 1.2 90/03/05 13:53:33 swick Exp $ */ #include "X.h" #include "Xmd.h" #include "Xproto.h" --- 66,72 ---- SOFTWARE. ******************************************************************/ ! /* $XConsortium: apa16GC.c,v 1.3 90/03/21 09:50:21 rws Exp $ */ #include "X.h" #include "Xmd.h" #include "Xproto.h" *************** *** 411,432 **** Mask changes; GCPtr pGCDst; { ! RegionPtr pClip; ! ! if(changes & GCClipMask) ! { ! if(pGCDst->clientClipType == CT_PIXMAP) ! { ! ((PixmapPtr)pGCDst->clientClip)->refcnt++; ! } ! else if(pGCDst->clientClipType == CT_REGION) ! { ! pClip = (RegionPtr) pGCDst->clientClip; ! pGCDst->clientClip = ! (pointer)(* pGCDst->pScreen->RegionCreate)(NULL, 1); ! (* pGCDst->pScreen->RegionCopy)(pGCDst->clientClip, pClip); ! } ! } } static void --- 411,417 ---- Mask changes; GCPtr pGCDst; { ! return; } static void --[0684]--