Author: benny
Date: 2006-07-27 21:21:25 +0000 (Thu, 27 Jul 2006)
New Revision: 22537
Modified:
thunar/trunk/ChangeLog
thunar/trunk/configure.in.in
thunar/trunk/thunar-vfs/thunar-vfs-thumb-pixbuf.c
Log:
2006-07-27 Benedikt Meurer <[EMAIL PROTECTED]>
* thunar-vfs/thunar-vfs-thumb-pixbuf.c(thunar_vfs_thumb_pixbuf_load):
Properly close the pixbuf loader prior to releasing it, even if the
pixbuf wasn't loaded successfully.
* configure.in.in: The glibc specified work-arounds break other the
build on other systems. Instead try to guess whether glibc-style
work-arounds are required.
Modified: thunar/trunk/ChangeLog
===================================================================
--- thunar/trunk/ChangeLog 2006-07-27 20:30:20 UTC (rev 22536)
+++ thunar/trunk/ChangeLog 2006-07-27 21:21:25 UTC (rev 22537)
@@ -1,5 +1,14 @@
2006-07-27 Benedikt Meurer <[EMAIL PROTECTED]>
+ * thunar-vfs/thunar-vfs-thumb-pixbuf.c(thunar_vfs_thumb_pixbuf_load):
+ Properly close the pixbuf loader prior to releasing it, even if the
+ pixbuf wasn't loaded successfully.
+ * configure.in.in: The glibc specified work-arounds break other the
+ build on other systems. Instead try to guess whether glibc-style
+ work-arounds are required.
+
+2006-07-27 Benedikt Meurer <[EMAIL PROTECTED]>
+
* configure.in.in, thunar-vfs/thunar-vfs-io-local-xfer.c,
tdb/Makefile.am: Work-around various glibc oddities.
Modified: thunar/trunk/configure.in.in
===================================================================
--- thunar/trunk/configure.in.in 2006-07-27 20:30:20 UTC (rev 22536)
+++ thunar/trunk/configure.in.in 2006-07-27 21:21:25 UTC (rev 22537)
@@ -96,8 +96,6 @@
dnl ***********************************************
dnl *** Work-around system-specific limitations ***
dnl ***********************************************
-AC_DEFINE([_XOPEN_SOURCE], [600], [Required to make glibc usable])
-AC_DEFINE([_BSD_SOURCE], [1], [Required to make glibc usable])
AC_SYS_LARGEFILE()
dnl **********************************
@@ -117,9 +115,47 @@
AC_FUNC_MMAP()
AC_CHECK_FUNCS([attropen extattr_get_fd fgetxattr lchmod localeconv \
localtime_r mbrtowc mkfifo posix_madvise pread pwrite \
- readdir_r sched_yield setgroupent setpassent statfs \
- statvfs strcoll strlcpy strptime symlink])
+ readdir_r sched_yield setgroupent setpassent statfs \
+ statvfs strcoll strlcpy strptime symlink])
+dnl ******************************************
+dnl *** Linux/glibc specified work-arounds ***
+dnl ******************************************
+m4_define([glibc_workaround_test],
+[
+posix_madvise (0, 0, POSIX_MADV_NORMAL);
+posix_madvise (0, 0, POSIX_MADV_SEQUENTIAL);
+posix_madvise (0, 0, POSIX_MADV_RANDOM);
+posix_madvise (0, 0, POSIX_MADV_WILLNEED);
+posix_madvise (0, 0, POSIX_MADV_DONTNEED);
+strptime (0, 0, 0);
+dirfd (0);
+])
+AC_MSG_CHECKING([whether we need _BSD_SOURCE and _XOPEN_SOURCE])
+AC_TRY_LINK([#include <sys/types.h>
+#include <sys/mman.h>
+#include <dirent.h>
+#include <time.h>], glibc_workaround_test(),
+[
+ AC_MSG_RESULT([no])
+],
+[
+ AC_TRY_LINK([#define _XOPEN_SOURCE 600
+#define _BSD_SOURCE
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <dirent.h>
+#include <time.h>], glibc_workaround_test(),
+ [
+ AC_DEFINE([_XOPEN_SOURCE], [600], [Required to unbreak glibc])
+ AC_DEFINE([_BSD_SOURCE], [1], [Required to unbreak glibc])
+ AC_MSG_RESULT([yes])
+ ],
+ [
+ AC_MSG_RESULT([no])
+ ])
+])
+
dnl ******************************
dnl *** Check for i18n support ***
dnl ******************************
Modified: thunar/trunk/thunar-vfs/thunar-vfs-thumb-pixbuf.c
===================================================================
--- thunar/trunk/thunar-vfs/thunar-vfs-thumb-pixbuf.c 2006-07-27 20:30:20 UTC
(rev 22536)
+++ thunar/trunk/thunar-vfs/thunar-vfs-thumb-pixbuf.c 2006-07-27 21:21:25 UTC
(rev 22537)
@@ -113,7 +113,7 @@
GdkPixbufLoader *loader;
struct stat statb;
GdkPixbuf *pixbuf = NULL;
- gboolean succeed;
+ gboolean succeed = FALSE;
guchar *buffer;
gint fd;
gint n;
@@ -144,6 +144,11 @@
if (G_UNLIKELY (buffer == MAP_FAILED))
goto nommap;
+ /* tell the kernel that we'll read sequentially */
+#ifdef HAVE_POSIX_MADVISE
+ posix_madvise (buffer, statb.st_size, POSIX_MADV_SEQUENTIAL);
+#endif
+
/* feed the data into the loader */
succeed = gdk_pixbuf_loader_write (loader, buffer, statb.st_size, NULL);
@@ -177,11 +182,8 @@
}
#endif
- /* tell the loader that we're done */
- succeed = (succeed && gdk_pixbuf_loader_close (loader, NULL));
-
/* check if we succeed */
- if (G_LIKELY (succeed))
+ if (G_LIKELY (succeed && gdk_pixbuf_loader_close (loader, NULL)))
{
/* determine the pixbuf... */
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
@@ -194,6 +196,9 @@
end2:
close (fd);
end1:
+ /* need to close the loader first if we failed */
+ if (G_UNLIKELY (!succeed))
+ gdk_pixbuf_loader_close (loader, NULL);
g_object_unref (G_OBJECT (loader));
end0:
return pixbuf;
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits