Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • libX11 libX11
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 69
    • Issues 69
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 8
    • Merge requests 8
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • xorg
  • lib
  • libX11libX11
  • Merge requests
  • !102
The source project of this merge request has been removed.

Fix memory leaks in _XFreeX11XCBStructure()

Merged Hodong requested to merge (removed):master into master Jan 17, 2022
  • Overview 11
  • Changes 1

Memory leaks occur even when XCloseDisplay() is performed.
XCloseDisplay() calls _XFreeDisplayStructure().
And _XFreeDisplayStructure() calls _XFreeX11XCBStructure().

XCloseDisplay() ---> _XFreeDisplayStructure() ---> _XFreeX11XCBStructure()

However, _XFreeX11XCBStructure() does not destroy the condition variables, resulting in memory leaks.

This patch fixes memory leaks.

Below is the test code.

#include <stdio.h>
#include <X11/Xlib.h>

int main ()
{
  Display *display;

  display = XOpenDisplay (NULL);

  if (!display)
  {
    puts ("XOpenDisplay failed");
    return 1;
  }

  XCloseDisplay (display);

  return 0;
}

% valgrind --leak-check=full ./xclose-display
==36296== Memcheck, a memory error detector
==36296== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==36296== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==36296== Command: ./xclose-display
==36296==
==36296==
==36296== HEAP SUMMARY:
==36296==     in use at exit: 1,232 bytes in 4 blocks
==36296==   total heap usage: 73 allocs, 69 frees, 90,457 bytes allocated
==36296==
==36296== 20 bytes in 1 blocks are definitely lost in loss record 1 of 4
==36296==    at 0x4851381: calloc (in /usr/local/libexec/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==36296==    by 0x49B5343: pthread_cond_init (in /lib/libthr.so.3)
==36296==    by 0x492E1CF: _XConnectXCB (in /usr/local/lib/libX11.so.6.4.0)
==36296==    by 0x491CF13: XOpenDisplay (in /usr/local/lib/libX11.so.6.4.0)
==36296==    by 0x201957: main (in /usr/home/hodong/projects/samples/xclose-display)
==36296==
==36296== 20 bytes in 1 blocks are definitely lost in loss record 2 of 4
==36296==    at 0x4851381: calloc (in /usr/local/libexec/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==36296==    by 0x49B5343: pthread_cond_init (in /lib/libthr.so.3)
==36296==    by 0x492E1E1: _XConnectXCB (in /usr/local/lib/libX11.so.6.4.0)
==36296==    by 0x491CF13: XOpenDisplay (in /usr/local/lib/libX11.so.6.4.0)
==36296==    by 0x201957: main (in /usr/home/hodong/projects/samples/xclose-display)
==36296==
==36296== LEAK SUMMARY:
==36296==    definitely lost: 40 bytes in 2 blocks
==36296==    indirectly lost: 0 bytes in 0 blocks
==36296==      possibly lost: 0 bytes in 0 blocks
==36296==    still reachable: 1,192 bytes in 2 blocks
==36296==         suppressed: 0 bytes in 0 blocks
==36296== Reachable blocks (those to which a pointer was found) are not shown.
==36296== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==36296==
==36296== For lists of detected and suppressed errors, rerun with: -s
==36296== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)

Signed-off-by: Hodong hodong@yozmos.com

Edited Jan 18, 2022 by Hodong
Assignee
Assign to
Reviewer
Request review from
Time tracking
Source branch: master