summaryrefslogtreecommitdiff
path: root/meta/recipes-devtools/pseudo
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-12-17 16:13:35 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2010-12-17 16:14:08 +0000
commit81f3d46fa5f16bfb8a0ee2e5569370337abe948c (patch)
treeec91758a8fea58a9d254be7b1f47681dc4d613b0 /meta/recipes-devtools/pseudo
parent3abc81b79850f42e8e041feab3acd52b574026f9 (diff)
downloadopenembedded-core-81f3d46fa5f16bfb8a0ee2e5569370337abe948c.tar.gz
openembedded-core-81f3d46fa5f16bfb8a0ee2e5569370337abe948c.tar.bz2
openembedded-core-81f3d46fa5f16bfb8a0ee2e5569370337abe948c.zip
pseudo: Fixup for cache problem
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'meta/recipes-devtools/pseudo')
-rw-r--r--meta/recipes-devtools/pseudo/pseudo/895fa7e359e8026a608fba052c2994e42901e45f.patch235
-rw-r--r--meta/recipes-devtools/pseudo/pseudo_git.bb5
2 files changed, 238 insertions, 2 deletions
diff --git a/meta/recipes-devtools/pseudo/pseudo/895fa7e359e8026a608fba052c2994e42901e45f.patch b/meta/recipes-devtools/pseudo/pseudo/895fa7e359e8026a608fba052c2994e42901e45f.patch
new file mode 100644
index 0000000000..d8c229541e
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/pseudo/895fa7e359e8026a608fba052c2994e42901e45f.patch
@@ -0,0 +1,235 @@
+From 895fa7e359e8026a608fba052c2994e42901e45f Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@windriver.com>
+Date: Fri, 17 Dec 2010 01:23:47 +0000
+Subject: Revert "Add a cache of the last object found in pseudo_op"
+
+This reverts commit 49d4d35918d457b0e9206679ecad3b9c84f11e66.
+
+Conflicts:
+
+ ChangeLog.txt
+---
+diff --git a/ChangeLog.txt b/ChangeLog.txt
+index 1db8c7d..200b32e 100644
+--- a/ChangeLog.txt
++++ b/ChangeLog.txt
+@@ -9,7 +9,6 @@
+ * (mhatle) as a result of profiling, optimize inode search
+ * (mhatle) rearrange the pseudo_op file data operations to reduce
+ the number of selects.
+- * (mhatle) add the ability to cache the last select result
+ * (mhatle) change the indexing in pseudo_db.c
+
+ 2010-12-14:
+diff --git a/pseudo.c b/pseudo.c
+index 3979fd8..6b965be 100644
+--- a/pseudo.c
++++ b/pseudo.c
+@@ -425,9 +425,6 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+ int found_path = 0, found_ino = 0;
+ int prefer_ino = 0;
+
+- static pseudo_msg_t cache_msg = { .op = 0 };
+- static char * cache_path = NULL;
+-
+ if (!msg)
+ return 1;
+
+@@ -471,59 +468,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+
+ /* Lookup the full path, with inode and dev if available */
+ if (msg->pathlen && msg->dev && msg->ino) {
+- if (cache_msg.pathlen == msg->pathlen &&
+- cache_msg.dev == msg->dev &&
+- cache_msg.ino == msg->ino &&
+- !strcmp(cache_path, msg->path)) {
+- /* Found it in the cache! */
+-#ifdef NPROFILE
+- pseudo_diag("cache hit -- by_file_exact\n");
+-#endif
+- /* Change the cache to match the msg */
+- cache_msg.type = msg->type;
+- cache_msg.op = msg->op;
+- cache_msg.result = msg->result;
+- cache_msg.access = msg->access;
+- cache_msg.fd = msg->fd;
+-#ifdef NVALIDATE
+- if (!pdb_find_file_exact(msg)) {
+- if (cache_msg.pathlen != msg->pathlen ||
+- cache_msg.dev != msg->dev ||
+- cache_msg.ino != msg->ino ||
+- cache_msg.uid != msg->uid ||
+- cache_msg.gid != msg->gid ||
+- cache_msg.mode != msg->mode ||
+- cache_msg.rdev != msg->rdev ||
+- cache_msg.nlink != msg->nlink ||
+- cache_msg.deleting != msg->deleting) {
+- pseudo_diag("Cache mismatch [%s]: Database differs from cache\n"
+- " cache vs result:\n"
+- " dev (%llu,%llu) ino (%llu,%llu)\n"
+- " uid (%d,%d) gid (%d,%d) mode (0%o,0%o)\n"
+- " rdev (%llu,%llu) nlink (%d,%d) deleting (%d,%d)\n",
+- msg->pathlen ? msg->path : "no path",
+- (unsigned long long) cache_msg.dev, (unsigned long long) msg->dev,
+- (unsigned long long) cache_msg.ino, (unsigned long long) msg->ino,
+- (unsigned long long) cache_msg.uid, (unsigned int) msg->uid,
+- (unsigned long long) cache_msg.gid, (unsigned int) msg->gid,
+- cache_msg.mode, msg->mode,
+- (unsigned long long) cache_msg.rdev, (unsigned int) msg->rdev,
+- cache_msg.nlink, msg->nlink,
+- cache_msg.deleting, msg->deleting);
+- }
+- } else {
+- pseudo_diag("Cache mismatch [%s]: Not found in DB\n",
+- msg->pathlen ? msg->path : "no path");
+- }
+-#endif
+-
+- by_path = cache_msg;
+- by_ino = cache_msg;
+- /* no need to restore msg */
+- found_path = 1;
+- found_ino = 1;
+- path_by_ino = msg->path;
+- } else if (!pdb_find_file_exact(msg)) {
++ if (!pdb_find_file_exact(msg)) {
+ /* restore header contents */
+ by_path = *msg;
+ by_ino = *msg;
+@@ -539,51 +484,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+ if (msg->pathlen) {
+ /* for now, don't canonicalize paths anymore */
+ /* used to do it here, but now doing it in client */
+- if (cache_msg.pathlen == msg->pathlen &&
+- !strcmp(cache_path, msg->path)) {
+-#ifdef NPROFILE
+- pseudo_diag("cache hit -- by_path\n");
+-#endif
+- /* Change the cache to match the msg */
+- cache_msg.type = msg->type;
+- cache_msg.op = msg->op;
+- cache_msg.result = msg->result;
+- cache_msg.access = msg->access;
+- cache_msg.fd = msg->fd;
+-#ifdef NVALIDATE
+- if (!pdb_find_file_exact(msg)) {
+- if (cache_msg.pathlen != msg->pathlen ||
+- cache_msg.dev != msg->dev ||
+- cache_msg.ino != msg->ino ||
+- cache_msg.uid != msg->uid ||
+- cache_msg.gid != msg->gid ||
+- cache_msg.mode != msg->mode ||
+- cache_msg.rdev != msg->rdev ||
+- cache_msg.nlink != msg->nlink ||
+- cache_msg.deleting != msg->deleting) {
+- pseudo_diag("Cache mismatch [%s]: Database differs from cache\n"
+- " cache vs result:\n"
+- " dev (%llu,%llu) ino (%llu,%llu)\n"
+- " uid (%d,%d) gid (%d,%d) mode (0%o,0%o)\n"
+- " rdev (%llu,%llu) nlink (%d,%d) deleting (%d,%d)\n",
+- msg->pathlen ? msg->path : "no path",
+- (unsigned long long) cache_msg.dev, (unsigned long long) msg->dev,
+- (unsigned long long) cache_msg.ino, (unsigned long long) msg->ino,
+- (unsigned long long) cache_msg.uid, (unsigned int) msg->uid,
+- (unsigned long long) cache_msg.gid, (unsigned int) msg->gid,
+- cache_msg.mode, msg->mode,
+- (unsigned long long) cache_msg.rdev, (unsigned int) msg->rdev,
+- cache_msg.nlink, msg->nlink,
+- cache_msg.deleting, msg->deleting);
+- }
+- } else {
+- pseudo_diag("Cache mismatch [%s]: Not found in DB\n",
+- msg->pathlen ? msg->path : "no path");
+- }
+-#endif
+- by_path = cache_msg;
+- found_path = 1;
+- } else if (!pdb_find_file_path(msg)) {
++ if (!pdb_find_file_path(msg)) {
+ by_path = *msg;
+ found_path = 1;
+ } else {
+@@ -594,51 +495,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+ }
+ /* search on original inode -- in case of mismatch */
+ if (msg->dev && msg->ino) {
+- if (cache_msg.dev == msg->dev &&
+- cache_msg.ino == msg->ino) {
+-#ifdef NPROFILE
+- pseudo_diag("cache hit -- by_ino\n");
+-#endif
+- /* Change the cache to match the msg */
+- cache_msg.type = msg->type;
+- cache_msg.op = msg->op;
+- cache_msg.result = msg->result;
+- cache_msg.access = msg->access;
+- cache_msg.fd = msg->fd;
+-#ifdef NVALIDATE
+- if (!pdb_find_file_exact(msg)) {
+- if (cache_msg.pathlen != msg->pathlen ||
+- cache_msg.dev != msg->dev ||
+- cache_msg.ino != msg->ino ||
+- cache_msg.uid != msg->uid ||
+- cache_msg.gid != msg->gid ||
+- cache_msg.mode != msg->mode ||
+- cache_msg.rdev != msg->rdev ||
+- cache_msg.nlink != msg->nlink ||
+- cache_msg.deleting != msg->deleting) {
+- pseudo_diag("Cache mismatch [%s]: Database differs from cache\n"
+- " cache vs result:\n"
+- " dev (%llu,%llu) ino (%llu,%llu)\n"
+- " uid (%d,%d) gid (%d,%d) mode (0%o,0%o)\n"
+- " rdev (%llu,%llu) nlink (%d,%d) deleting (%d,%d)\n",
+- msg->pathlen ? msg->path : "no path",
+- (unsigned long long) cache_msg.dev, (unsigned long long) msg->dev,
+- (unsigned long long) cache_msg.ino, (unsigned long long) msg->ino,
+- (unsigned long long) cache_msg.uid, (unsigned int) msg->uid,
+- (unsigned long long) cache_msg.gid, (unsigned int) msg->gid,
+- cache_msg.mode, msg->mode,
+- (unsigned long long) cache_msg.rdev, (unsigned int) msg->rdev,
+- cache_msg.nlink, msg->nlink,
+- cache_msg.deleting, msg->deleting);
+- }
+- } else {
+- pseudo_diag("Cache mismatch [%s]: Not found in DB\n",
+- msg->pathlen ? msg->path : "no path");
+- }
+-#endif
+- found_ino = 1;
+- path_by_ino = cache_path;
+- } else if (!pdb_find_file_dev(&by_ino)) {
++ if (!pdb_find_file_dev(&by_ino)) {
+ found_ino = 1;
+ path_by_ino = pdb_get_file_path(&by_ino);
+ }
+@@ -1016,28 +873,6 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+ break;
+ }
+
+- /* Cache previous values... */
+- if (msg->op != OP_MAY_UNLINK &&
+- msg->op != OP_DID_UNLINK &&
+- msg->op != OP_CANCEL_UNLINK &&
+- msg->op != OP_UNLINK) {
+-
+- cache_msg = *msg;
+-
+- free(cache_path);
+-
+- if (path_by_ino)
+- cache_path = strdup(path_by_ino);
+- else
+- cache_path = strdup(msg->path);
+- } else {
+- cache_msg.pathlen = 0;
+- cache_msg.dev = 0;
+- cache_msg.ino = 0;
+- free(cache_path);
+- cache_path = NULL;
+- }
+-
+ /* in the case of an exact match, we just used the pointer
+ * rather than allocating space
+ */
+--
+cgit v0.8.3.3-89-gbf82
diff --git a/meta/recipes-devtools/pseudo/pseudo_git.bb b/meta/recipes-devtools/pseudo/pseudo_git.bb
index 55055fa0d3..f9b10f0d36 100644
--- a/meta/recipes-devtools/pseudo/pseudo_git.bb
+++ b/meta/recipes-devtools/pseudo/pseudo_git.bb
@@ -6,10 +6,11 @@ LICENSE = "LGPL2.1"
DEPENDS = "sqlite3"
PV = "0.0+git${SRCPV}"
-PR = "r15"
+PR = "r16"
SRC_URI = "git://github.com/wrpseudo/pseudo.git;protocol=git \
- file://static_sqlite.patch"
+ file://static_sqlite.patch \
+ file://895fa7e359e8026a608fba052c2994e42901e45f.patch"
FILES_${PN} = "${libdir}/libpseudo.so ${bindir}/* ${localstatedir}/pseudo"
PROVIDES += "virtual/fakeroot"