Sorry to bug both of you, but I wasn't entirely clear which bits were
maintained by x.org, and which by XFree86.org, so I'm copying you both.
VERSION:
R6.6
CLIENT MACHINE and OPERATING SYSTEM:
intel / RedHat9.0 w/ kernel version 2.4.20-20.9
DISPLAY TYPE:
XF86_Config
WINDOW MANAGER:
metacity
COMPILER:
gcc 3.2.2
AREA:
Xv
SYNOPSIS:
There's a small memory leak in XvQueryAdaptors().
DESCRIPTION:
Not all of the memory allocated by XvQueryAdaptors is freed by
XvFreeAdaptorInfo.
It looks as though the culprit is the first Xalloc() in
XvQueryAdaptors(). The space is used as a local buffer (pointer
assigned to variable named "buffer") -- that is, the returned
XvAdaptorInfo structure does not have a reference to this memory, so
it is not XvFreeAdaptorInfo's responsibility to free it. It must be
freed before returning from XvQueryAdaptors().
There are several failure paths where buffer is freed. But on
success, it is not freed.
REPEAT BY:
Compile this, run it, and watch its size grow.
----- 8< ----- Cut Here ----- 8< -----
/* gcc -o xvleak xvleak.c -L/usr/X11R6/lib -lXext -lXv -lX11 */
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xvlib.h>
int
main()
{
int numAdapt;
XvAdaptorInfo *info;
Display *dis = XOpenDisplay(0);
Window win = DefaultRootWindow(dis);
while (Success == XvQueryAdaptors(dis,win,&numAdapt,&info))
XvFreeAdaptorInfo(info);
}
----- 8< ----- Cut Here ----- 8< -----
SAMPLE FIX:
Insert "Xfree(buffer);" immediately before the last return statement
of the XvQueryAdaptor().
I've tried this fix, and it seems ok. The above sample program does
not work, and at least one Real Program (one that acutally uses the
returned data) seems to continue to work correctly.
phil dumont
[EMAIL PROTECTED]
p.s., from a cursory glance at XvQueryExtensions(), I'd say it has the
same problem, though I haven't tested it or tried to fix it.
_______________________________________________
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86