[Xquartz-changes] mesa: Branch 'master' - 4 commits
Jeremy Huddleston
jeremyhu at freedesktop.org
Sun Apr 29 00:45:24 PDT 2012
Rebased ref, commits from common ancestor:
commit a6728b87556fda82ce0052aab505eacbb62c27c2
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Fri Apr 27 18:36:33 2012 -0700
darwin: Eliminate a possible race condition while destroying a surface
Introduced by: c60ffd2840036af1ea6f2b6c6e1e9014bb8e2c34
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
diff --git a/src/glx/apple/apple_glx_surface.c b/src/glx/apple/apple_glx_surface.c
index d42fa3b..9155202 100644
--- a/src/glx/apple/apple_glx_surface.c
+++ b/src/glx/apple/apple_glx_surface.c
@@ -207,9 +207,6 @@ apple_glx_surface_destroy(unsigned int uid)
d->types.surface.pending_destroy = true;
d->release(d);
- /* apple_glx_drawable_find_by_uid returns a locked drawable */
- d->unlock(d);
-
/*
* We release 2 references to the surface. One was acquired by
* the find, and the other was leftover from a context, or
@@ -220,6 +217,9 @@ apple_glx_surface_destroy(unsigned int uid)
* to actually destroy it when the pending_destroy is processed
* by a glViewport callback (see apple_glx_context_update()).
*/
- d->destroy(d);
+ if (!d->destroy(d)) {
+ /* apple_glx_drawable_find_by_uid returns a locked drawable */
+ d->unlock(d);
+ }
}
}
commit 4e076cbc52a88bb57e29e843ab1a107c3c399b96
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Sat Apr 28 23:19:42 2012 -0700
darwin: Use ASL for logging
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
diff --git a/src/glx/apple/Makefile b/src/glx/apple/Makefile
index dc64295..68fe6ad 100644
--- a/src/glx/apple/Makefile
+++ b/src/glx/apple/Makefile
@@ -26,6 +26,7 @@ SOURCES = \
apple_glx.c \
apple_glx_context.c \
apple_glx_drawable.c \
+ apple_glx_log.c \
apple_glx_pbuffer.c \
apple_glx_pixmap.c \
apple_glx_surface.c \
diff --git a/src/glx/apple/apple_glx.c b/src/glx/apple/apple_glx.c
index d94c1e0..56cff64 100644
--- a/src/glx/apple/apple_glx.c
+++ b/src/glx/apple/apple_glx.c
@@ -33,6 +33,8 @@
#include <assert.h>
#include <stdarg.h>
#include <dlfcn.h>
+#include <pthread.h>
+#include <inttypes.h>
#include "appledri.h"
#include "apple_glx.h"
#include "apple_glx_context.h"
@@ -43,22 +45,6 @@ static int dri_event_base = 0;
const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 };
-static bool diagnostic = false;
-
-void
-apple_glx_diagnostic(const char *fmt, ...)
-{
- va_list vl;
-
- if (diagnostic) {
- fprintf(stderr, "DIAG: ");
-
- va_start(vl, fmt);
- vfprintf(stderr, fmt, vl);
- va_end(vl);
- }
-}
-
int
apple_get_dri_event_base(void)
{
@@ -125,10 +111,9 @@ apple_init_glx(Display * dpy)
if (initialized)
return false;
- if (getenv("LIBGL_DIAGNOSTIC")) {
- printf("initializing libGL in %s\n", __func__);
- diagnostic = true;
- }
+ apple_glx_log_init();
+
+ apple_glx_log(ASL_LEVEL_INFO, "Initializing libGL.");
apple_cgl_init();
(void) apple_glx_get_client_id();
diff --git a/src/glx/apple/apple_glx.h b/src/glx/apple/apple_glx.h
index ce8c488..0967f18 100644
--- a/src/glx/apple/apple_glx.h
+++ b/src/glx/apple/apple_glx.h
@@ -38,7 +38,8 @@
#define XP_NO_X_HEADERS
#include <Xplugin.h>
-void apple_glx_diagnostic(const char *fmt, ...);
+#include "apple_glx_log.h"
+
xp_client_id apple_glx_get_client_id(void);
bool apple_init_glx(Display * dpy);
void apple_glx_swap_buffers(void *ptr);
diff --git a/src/glx/apple/apple_glx_log.c b/src/glx/apple/apple_glx_log.c
new file mode 100644
index 0000000..9ebf666
--- /dev/null
+++ b/src/glx/apple/apple_glx_log.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2012 Apple Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
+ * HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name(s) of the above
+ * copyright holders shall not be used in advertising or otherwise to
+ * promote the sale, use or other dealings in this Software without
+ * prior written authorization.
+ */
+
+#include <sys/cdefs.h>
+#include <asl.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include "apple_glx_log.h"
+
+static bool diagnostic = false;
+static aslclient aslc;
+
+void apple_glx_log_init(void) {
+ if (getenv("LIBGL_DIAGNOSTIC")) {
+ diagnostic = true;
+ }
+
+ aslc = asl_open(NULL, NULL, 0);
+}
+
+void _apple_glx_log(int level, const char *file, const char *function,
+ int line, const char *fmt, ...) {
+ va_list v;
+ va_start(v, fmt);
+ _apple_glx_vlog(level, file, function, line, fmt, v);
+ va_end(v);
+}
+
+static const char *
+_asl_level_string(int level)
+{
+ if (level == ASL_LEVEL_EMERG) return ASL_STRING_EMERG;
+ if (level == ASL_LEVEL_ALERT) return ASL_STRING_ALERT;
+ if (level == ASL_LEVEL_CRIT) return ASL_STRING_CRIT;
+ if (level == ASL_LEVEL_ERR) return ASL_STRING_ERR;
+ if (level == ASL_LEVEL_WARNING) return ASL_STRING_WARNING;
+ if (level == ASL_LEVEL_NOTICE) return ASL_STRING_NOTICE;
+ if (level == ASL_LEVEL_INFO) return ASL_STRING_INFO;
+ if (level == ASL_LEVEL_DEBUG) return ASL_STRING_DEBUG;
+ return "unknown";
+}
+
+void _apple_glx_vlog(int level, const char *file, const char *function,
+ int line, const char *fmt, va_list args) {
+ aslmsg msg;
+ uint64_t thread = 0;
+
+ if (pthread_is_threaded_np()) {
+ pthread_threadid_np(NULL, &thread);
+ }
+
+ if (diagnostic) {
+ va_list args2;
+ va_copy(args2, args);
+
+ fprintf(stderr, "%-9s %24s:%-4d %s(%"PRIu64"): ",
+ _asl_level_string(level), file, line, function, thread);
+ vfprintf(stderr, fmt, args2);
+ }
+
+ msg = asl_new(ASL_TYPE_MSG);
+ if (msg) {
+ if (file)
+ asl_set(msg, "File", file);
+ if (function)
+ asl_set(msg, "Function", function);
+ if (line) {
+ char *_line;
+ asprintf(&_line, "%d", line);
+ if (_line) {
+ asl_set(msg, "Line", _line);
+ free(_line);
+ }
+ }
+ if (pthread_is_threaded_np()) {
+ char *_thread;
+ asprintf(&_thread, "%"PRIu64, thread);
+ if (_thread) {
+ asl_set(msg, "Thread", _thread);
+ free(_thread);
+ }
+ }
+ }
+
+ asl_vlog(aslc, msg, level, fmt, args);
+ if (msg)
+ asl_free(msg);
+}
diff --git a/src/glx/apple/apple_glx_log.h b/src/glx/apple/apple_glx_log.h
new file mode 100644
index 0000000..4b1c531
--- /dev/null
+++ b/src/glx/apple/apple_glx_log.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2012 Apple Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
+ * HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name(s) of the above
+ * copyright holders shall not be used in advertising or otherwise to
+ * promote the sale, use or other dealings in this Software without
+ * prior written authorization.
+ */
+
+#ifndef APPLE_GLX_LOG_H
+#define APPLE_GLX_LOG_H
+
+#include <sys/cdefs.h>
+#include <asl.h>
+
+void apple_glx_log_init(void);
+
+__printflike(5, 6)
+void _apple_glx_log(int level, const char *file, const char *function,
+ int line, const char *fmt, ...);
+#define apple_glx_log(l, f, args ...) \
+ _apple_glx_log(l, __FILE__, __FUNCTION__, __LINE__, f, ## args)
+
+
+__printflike(5, 0)
+void _apple_glx_vlog(int level, const char *file, const char *function,
+ int line, const char *fmt, va_list v);
+#define apple_glx_vlog(l, f, v) \
+ _apple_glx_vlog(l, __FILE__, __FUNCTION__, __LINE__, f, v)
+
+/* This is just here to help the transition.
+ * TODO: Replace calls to apple_glx_diagnostic
+ */
+#define apple_glx_diagnostic(f, args ...) \
+ apple_glx_log(ASL_LEVEL_DEBUG, f, ## args)
+
+#endif
commit 554c1e1cc053e19acb2b4791b6e156436d112e11
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Sat Apr 28 16:50:00 2012 -0700
darwin: Make reported errors more user-friendly
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
diff --git a/src/glx/apple/apple_glx_drawable.c b/src/glx/apple/apple_glx_drawable.c
index db28302..3f84d56 100644
--- a/src/glx/apple/apple_glx_drawable.c
+++ b/src/glx/apple/apple_glx_drawable.c
@@ -32,6 +32,7 @@
#include <stdlib.h>
#include <assert.h>
#include <pthread.h>
+#include <string.h>
#include "apple_glx.h"
#include "apple_glx_context.h"
#include "apple_glx_drawable.h"
@@ -48,8 +49,8 @@ lock_drawables_list(void)
err = pthread_mutex_lock(&drawables_lock);
if (err) {
- fprintf(stderr, "pthread_mutex_lock failure in %s: %d\n",
- __func__, err);
+ fprintf(stderr, "pthread_mutex_lock failure in %s: %s\n",
+ __func__, strerror(err));
abort();
}
}
@@ -62,8 +63,8 @@ unlock_drawables_list(void)
err = pthread_mutex_unlock(&drawables_lock);
if (err) {
- fprintf(stderr, "pthread_mutex_unlock failure in %s: %d\n",
- __func__, err);
+ fprintf(stderr, "pthread_mutex_unlock failure in %s: %s\n",
+ __func__, strerror(err));
abort();
}
}
@@ -95,7 +96,7 @@ drawable_lock(struct apple_glx_drawable *agd)
err = pthread_mutex_lock(&agd->mutex);
if (err) {
- fprintf(stderr, "pthread_mutex_lock error: %d\n", err);
+ fprintf(stderr, "pthread_mutex_lock error: %s\n", strerror(err));
abort();
}
}
@@ -108,7 +109,7 @@ drawable_unlock(struct apple_glx_drawable *d)
err = pthread_mutex_unlock(&d->mutex);
if (err) {
- fprintf(stderr, "pthread_mutex_unlock error: %d\n", err);
+ fprintf(stderr, "pthread_mutex_unlock error: %s\n", strerror(err));
abort();
}
}
@@ -245,7 +246,7 @@ common_init(Display * dpy, GLXDrawable drawable, struct apple_glx_drawable *d)
err = pthread_mutexattr_init(&attr);
if (err) {
- fprintf(stderr, "pthread_mutexattr_init error: %d\n", err);
+ fprintf(stderr, "pthread_mutexattr_init error: %s\n", strerror(err));
abort();
}
@@ -257,14 +258,14 @@ common_init(Display * dpy, GLXDrawable drawable, struct apple_glx_drawable *d)
err = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
if (err) {
- fprintf(stderr, "error: setting pthread mutex type: %d\n", err);
+ fprintf(stderr, "error: setting pthread mutex type: %s\n", strerror(err));
abort();
}
err = pthread_mutex_init(&d->mutex, &attr);
if (err) {
- fprintf(stderr, "pthread_mutex_init error: %d\n", err);
+ fprintf(stderr, "pthread_mutex_init error: %s\n", strerror(err));
abort();
}
commit 35f5194d14078f4770fe69b36e36363a164c16bf
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Sun Apr 29 00:27:03 2012 -0700
darwin: Fix an error message
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
diff --git a/src/glx/apple/apple_glx_context.c b/src/glx/apple/apple_glx_context.c
index c58d05a..0bb25b4 100644
--- a/src/glx/apple/apple_glx_context.c
+++ b/src/glx/apple/apple_glx_context.c
@@ -421,7 +421,7 @@ apple_glx_make_current_context(Display * dpy, void *oldptr, void *ptr,
*/
if (same_drawable && ac->is_current) {
- apple_glx_diagnostic("%s: same_drawable and ac->is_current\n");
+ apple_glx_diagnostic("same_drawable and ac->is_current\n");
return false;
}
More information about the Xquartz-changes
mailing list