[tracker/posix_fadvise: 3/3] tracker-extract: First stab at fixing GB#575993
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/posix_fadvise: 3/3] tracker-extract: First stab at fixing GB#575993
- Date: Thu, 16 Sep 2010 15:51:57 +0000 (UTC)
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]