#include <unistd.h>
#include <glib.h>
+#include <pthread.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()
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;
}
}
}
-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);
+ path = content_get_path(id);
- if (path)
+ if (path) {
+ pthread_mutex_lock(&lock);
file_set_content(path, content);
+ pthread_mutex_unlock(&lock);
+ }
g_free(path);
}
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);
{
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);