summaryrefslogtreecommitdiffstats
path: root/compton.c
diff options
context:
space:
mode:
authorRichard Grenville <[email protected]>2012-10-10 21:12:46 +0800
committerRichard Grenville <[email protected]>2012-10-10 21:17:48 +0800
commit5d3425b5dc3b651f8638fc545a6f8efcca8fd35a (patch)
tree379fec3fdcea0f74edef81844f052b300766a34e /compton.c
parentae5771e1cfad32f0c2a0a8ed59fb04867f43b5b2 (diff)
downloadtdebase-5d3425b5dc3b651f8638fc545a6f8efcca8fd35a.tar.gz
tdebase-5d3425b5dc3b651f8638fc545a6f8efcca8fd35a.zip
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.
Diffstat (limited to 'compton.c')
-rwxr-xr-xcompton.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/compton.c b/compton.c
index 81199cd29..9f1448826 100755
--- a/compton.c
+++ b/compton.c
@@ -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;
}