projects
/
prss.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
asynchronous download of the article content
[prss.git]
/
src
/
ttrss_cache.c
diff --git
a/src/ttrss_cache.c
b/src/ttrss_cache.c
index
1526e25
..
a2af0b0
100644
(file)
--- a/
src/ttrss_cache.c
+++ b/
src/ttrss_cache.c
@@
-25,11
+25,13
@@
#include <unistd.h>
#include <glib.h>
#include <unistd.h>
#include <glib.h>
+#include <pthread.h>
#include "io.h"
#include "log.h"
#include "ttrss_cache.h"
#include "io.h"
#include "log.h"
#include "ttrss_cache.h"
+static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
static char *cache_dir;
static const char *get_cache_dir()
static char *cache_dir;
static const char *get_cache_dir()
@@
-49,13
+51,13
@@
static const char *get_cache_dir()
return cache_dir;
}
return cache_dir;
}
-static gchar *content_get_path(
const struct headline *h
)
+static gchar *content_get_path(
int id
)
{
const char *cache_dir;
cache_dir = get_cache_dir();
if (cache_dir)
{
const char *cache_dir;
cache_dir = get_cache_dir();
if (cache_dir)
- return g_strdup_printf("%s/%d", cache_dir,
h->
id);
+ return g_strdup_printf("%s/%d", cache_dir, id);
return NULL;
}
return NULL;
}
@@
-73,14
+75,17
@@
static void file_set_content(const char *path, const char *content)
}
}
}
}
-void cache_put(
const struct headline *h
, const char *content)
+void cache_put(
int id
, const char *content)
{
char *path;
{
char *path;
- path = content_get_path(h);
-
- if (path)
+ path = content_get_path(id);
+
+ if (path) {
+ pthread_mutex_lock(&lock);
file_set_content(path, content);
file_set_content(path, content);
+ pthread_mutex_unlock(&lock);
+ }
g_free(path);
}
g_free(path);
}
@@
-91,12
+96,14
@@
int cache_exists(const struct headline *h)
char *path;
int result;
char *path;
int result;
- path = content_get_path(h);
+ path = content_get_path(h
->id
);
+ pthread_mutex_lock(&lock);
if (stat(path, &s) == -1)
result = 0;
else
result = 1;
if (stat(path, &s) == -1)
result = 0;
else
result = 1;
+ pthread_mutex_unlock(&lock);
g_free(path);
g_free(path);
@@
-107,11
+114,15
@@
char *cache_get(const struct headline *h)
{
char *content, *path;
{
char *content, *path;
- path = content_get_path(h);
- if (path)
+
+ path = content_get_path(h->id);
+ if (path) {
+ pthread_mutex_lock(&lock);
content = file_get_content(path);
content = file_get_content(path);
- else
+ pthread_mutex_unlock(&lock);
+ } else {
content = NULL;
content = NULL;
+ }
g_free(path);
g_free(path);