Misc: Code clean-up

- Fix a memory leak in register_cm().

- Print a warning message if argument of --vsync is invalid.

- Known bug: compton will probably freeze X if another compositing
  window manager is running and --vsync opengl is enabled, with
  nvidia-drivers-304.51. Probably an issue on the driver. I could see no
  workaround.
This commit is contained in:
Richard Grenville 2012-10-10 21:12:46 +08:00
parent b59e592588
commit 72ea4b5f47
3 changed files with 21 additions and 7 deletions

View File

@ -38,6 +38,7 @@ ifeq "$(NO_VSYNC_OPENGL)" ""
LIBS += -lGL
endif
CFLAGS ?= -DNDEBUG
CFLAGS += $(CFG)
LIBS += $(shell pkg-config --libs $(PACKAGES))

View File

@ -35,7 +35,7 @@ const char *WINTYPES[NUM_WINTYPES] = {
struct timeval time_start = { 0, 0 };
win *list;
Display *dpy;
Display *dpy = NULL;
int scr;
Window root;
@ -3138,10 +3138,12 @@ register_cm(Bool want_glxct) {
#ifdef CONFIG_VSYNC_OPENGL
// Create a window with the wanted GLX visual
if (want_glxct) {
XVisualInfo *pvi = NULL;
Bool ret = False;
// Get visual for the window
int attribs[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None };
XVisualInfo *pvi = glXChooseVisual(dpy, scr, attribs);
pvi = glXChooseVisual(dpy, scr, attribs);
if (!pvi) {
fprintf(stderr, "register_cm(): Failed to choose visual required "
"by fake OpenGL VSync window. OpenGL VSync turned off.\n");
@ -3156,6 +3158,7 @@ register_cm(Bool want_glxct) {
pvi->screen = scr;
reg_win = XCreateWindow(dpy, root, 0, 0, 1, 1, 0, pvi->depth,
InputOutput, pvi->visual, CWBorderPixel | CWColormap, &swa);
if (!reg_win)
fprintf(stderr, "register_cm(): Failed to create window required "
"by fake OpenGL VSync. OpenGL VSync turned off.\n");
@ -3175,6 +3178,9 @@ register_cm(Bool want_glxct) {
}
}
}
if (pvi)
XFree(pvi);
if (!ret)
opts.vsync = VSYNC_NONE;
}
@ -3650,11 +3656,17 @@ get_cfg(int argc, char *const *argv) {
break;
case 270:
// --vsync
for (vsync_t i = 0; i < sizeof(vsync_str) / sizeof(vsync_str[0]); ++i)
if (!strcasecmp(optarg, vsync_str[i])) {
opts.vsync = i;
break;
{
vsync_t i;
for (i = 0; i < (sizeof(vsync_str) / sizeof(vsync_str[0])); ++i)
if (!strcasecmp(optarg, vsync_str[i])) {
opts.vsync = i;
break;
}
if ((sizeof(vsync_str) / sizeof(vsync_str[0])) == i) {
fputs("Invalid --vsync argument. Ignored.\n", stderr);
}
}
break;
default:
usage();
@ -4011,6 +4023,8 @@ vsync_wait(Display *dpy, struct pollfd *fd, int timeout) {
#endif
// This place should not reached!
assert(0);
return 0;
}

View File

@ -31,7 +31,6 @@
// Whether to enable OpenGL VSync support
// #define CONFIG_VSYNC_OPENGL 1
#define NDEBUG 1
// === Includes ===
// For some special functions