[tracker/posix_fadvise: 3/3] tracker-extract: First stab at fixing GB#575993



commit 2873d2c70677b62f10cb4d6c12429a8154153056
Author: Martyn Russell <martyn lanedo com>
Date:   Thu Sep 16 16:48:41 2010 +0100

    tracker-extract: First stab at fixing GB#575993

 src/libtracker-common/tracker-file-utils.c   |    7 +++++++
 src/tracker-extract/tracker-extract-mp3.c    |    9 +++++++++
 src/tracker-extract/tracker-extract-png.c    |    6 ++++++
 src/tracker-extract/tracker-extract-ps.c     |    4 ++++
 src/tracker-extract/tracker-extract-vorbis.c |    9 +++++++++
 src/tracker-extract/tracker-read.c           |   10 ++++++++++
 6 files changed, 45 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-common/tracker-file-utils.c b/src/libtracker-common/tracker-file-utils.c
index 5cf65bd..8456a21 100644
--- a/src/libtracker-common/tracker-file-utils.c
+++ b/src/libtracker-common/tracker-file-utils.c
@@ -88,6 +88,13 @@ tracker_file_close (FILE     *file,
 {
 	g_return_if_fail (file != NULL);
 
+#ifdef HAVE_POSIX_FADVISE
+	if (!need_again_soon) {
+		posix_fadvise (fileno (file), 0, 0, POSIX_FADV_NOREUSE);
+		posix_fadvise (fileno (file), 0, 0, POSIX_FADV_DONTNEED);
+	}
+#endif /* HAVE_POSIX_FADVISE */
+
 	fclose (file);
 }
 
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index 534222a..5ca435a 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -1970,6 +1970,10 @@ extract_mp3 (const gchar          *uri,
 	}
 #endif
 
+#ifdef HAVE_POSIX_FADVISE
+	posix_fadvise (fd, 0, 0, POSIX_FADV_RANDOM);
+#endif /* HAVE_POSIX_FADVISE */
+
 #ifndef G_OS_WIN32
 	/* We don't use GLib's mmap because size can not be specified */
 	buffer = mmap (NULL,
@@ -1982,6 +1986,11 @@ extract_mp3 (const gchar          *uri,
 
 	id3v1_buffer = read_id3v1_buffer (fd, size);
 
+#ifdef HAVE_POSIX_FADVISE
+	posix_fadvise (fd, 0, 0, POSIX_FADV_NOREUSE);
+	posix_fadvise (fd, 0, 0, POSIX_FADV_DONTNEED);
+#endif /* HAVE_POSIX_FADVISE */
+
 	close (fd);
 
 	if (buffer == NULL || buffer == (void*) -1) {
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index 699f2c5..2bef9c1 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -24,6 +24,8 @@
 #define _GNU_SOURCE
 #endif
 
+#include <fcntl.h>
+
 #include <png.h>
 
 #include <libtracker-common/tracker-file-utils.h>
@@ -510,6 +512,10 @@ extract_png (const gchar          *uri,
 		return;
 	}
 
+#ifdef HAVE_POSIX_FADVISE
+	posix_fadvise (fileno (f), 0, size, POSIX_FADV_RANDOM);
+#endif /* HAVE_POSIX_FADVISE */
+
 	png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING,
 	                                  NULL,
 	                                  NULL,
diff --git a/src/tracker-extract/tracker-extract-ps.c b/src/tracker-extract/tracker-extract-ps.c
index 9ff0242..4667e1e 100644
--- a/src/tracker-extract/tracker-extract-ps.c
+++ b/src/tracker-extract/tracker-extract-ps.c
@@ -284,6 +284,10 @@ extract_ps_gz (const gchar          *uri,
 	{
 		g_debug ("Extracting compressed PS '%s'...", uri);
 		extract_ps_from_filestream (fz, preupdate, metadata);
+#ifdef HAVE_POSIX_FADVISE
+		posix_fadvise (fdz, 0, 0, POSIX_FADV_NOREUSE);
+		posix_fadvise (fdz, 0, 0, POSIX_FADV_DONTNEED);
+#endif /* HAVE_POSIX_FADVISE */
 		fclose (fz);
 	}
 
diff --git a/src/tracker-extract/tracker-extract-vorbis.c b/src/tracker-extract/tracker-extract-vorbis.c
index 213c25d..358107a 100644
--- a/src/tracker-extract/tracker-extract-vorbis.c
+++ b/src/tracker-extract/tracker-extract-vorbis.c
@@ -118,6 +118,10 @@ extract_vorbis (const char *uri,
 		return;
 	}
 
+#ifdef HAVE_POSIX_FADVISE
+	posix_fadvise (fileno (f), 0, 0, POSIX_FADV_RANDOM);
+#endif /* HAVE_POSIX_FADVISE */
+
 	if (ov_open (f, &vf, NULL, 0) < 0) {
 		tracker_file_close (f, FALSE);
 		return;
@@ -437,6 +441,11 @@ extract_vorbis (const char *uri,
 	g_free (vd.album_artist);
 	g_free (vd.performer);
 
+#ifdef HAVE_POSIX_FADVISE
+	posix_fadvise (fileno (f), 0, 0, POSIX_FADV_NOREUSE);
+	posix_fadvise (fileno (f), 0, 0, POSIX_FADV_DONTNEED);
+#endif /* HAVE_POSIX_FADVISE */
+
 	/* NOTE: This calls fclose on the file */
 	ov_clear (&vf);
 }
diff --git a/src/tracker-extract/tracker-read.c b/src/tracker-extract/tracker-read.c
index be364ad..017bf65 100644
--- a/src/tracker-extract/tracker-read.c
+++ b/src/tracker-extract/tracker-read.c
@@ -17,8 +17,11 @@
  * Boston, MA  02110-1301, USA.
  */
 
+#include "config.h"
+
 #include <string.h>
 #include <unistd.h>
+#include <fcntl.h>
 
 #include <glib.h>
 #include <gio/gio.h>
@@ -243,6 +246,10 @@ tracker_read_text_from_fd (gint     fd,
 		return NULL;
 	}
 
+#ifdef HAVE_POSIX_FADVISE
+	posix_fadvise (fd, 0, max_bytes, POSIX_FADV_SEQUENTIAL);
+#endif /* HAVE_POSIX_FADVISE */
+
 	/* Reading in chunks of BUFFER_SIZE
 	 *   Loop is halted whenever one of this conditions is met:
 	 *     a) Read bytes reached the maximum allowed (max_bytes)
@@ -272,6 +279,9 @@ tracker_read_text_from_fd (gint     fd,
 	}
 
 	/* Close the file here */
+#ifdef HAVE_POSIX_FADVISE
+	posix_fadvise (fd, 0, 0, POSIX_FADV_DONTNEED);
+#endif /* HAVE_POSIX_FADVISE */
 	fclose (fz);
 
 	/* Validate UTF-8 if something was read, and return it */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]