X-Git-Url: https://git.wpitchoune.net/gitweb/?p=prss.git;a=blobdiff_plain;f=src%2Fttrss_cache.c;h=a2af0b07d414e03a026f002d9e2693259e04e93a;hp=1526e25ad437776bb8256631a8cbc909553f7080;hb=c6fa04234bdb4ad62f0ed0e3f9a619a2ff007e8a;hpb=a3f79452df23ac3db9e7a827e16097322de377c0 diff --git a/src/ttrss_cache.c b/src/ttrss_cache.c index 1526e25..a2af0b0 100644 --- a/src/ttrss_cache.c +++ b/src/ttrss_cache.c @@ -25,11 +25,13 @@ #include #include +#include #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() @@ -49,13 +51,13 @@ static const char *get_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) - return g_strdup_printf("%s/%d", cache_dir, h->id); + return g_strdup_printf("%s/%d", cache_dir, id); 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; - path = content_get_path(h); - - if (path) + path = content_get_path(id); + + if (path) { + pthread_mutex_lock(&lock); file_set_content(path, content); + pthread_mutex_unlock(&lock); + } g_free(path); } @@ -91,12 +96,14 @@ int cache_exists(const struct headline *h) 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; + pthread_mutex_unlock(&lock); g_free(path); @@ -107,11 +114,15 @@ char *cache_get(const struct headline *h) { 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); - else + pthread_mutex_unlock(&lock); + } else { content = NULL; + } g_free(path);