fd: Improve error handling of write_nonblock().
[paraslash.git] / mood.c
diff --git a/mood.c b/mood.c
index 732df0a32f8d1e7d19d08f04c773dc5026589caf..1a572cfa8f1859a946ea34708b48e990a036f5b2 100644 (file)
--- a/mood.c
+++ b/mood.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2012 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -79,13 +79,13 @@ struct mood {
 static struct mood *current_mood;
 
 /**
- *  Rough approximation to sqrt.
+ * Rough approximation to sqrt.
  *
- *  \param x Integer of which to calculate the sqrt.
+ * \param x Integer of which to calculate the sqrt.
  *
- *  \return An integer res with res * res <= x.
+ * \return An integer res with res * res <= x.
  */
-static uint64_t int_sqrt(uint64_t x)
+__a_const static uint64_t int_sqrt(uint64_t x)
 {
        uint64_t op, res, one = 1;
        op = x;
@@ -422,7 +422,7 @@ out:
 void mood_check_callback(int fd, __a_unused const struct osl_object *query)
 {
        struct para_buffer pb = {
-               .max_size = SHMMAX,
+               .max_size = shm_get_shmmax(),
                .private_data = &fd,
                .max_size_handler = pass_buffer_as_shm
        };
@@ -904,6 +904,8 @@ static int reload_current_mood(void)
 int moods_event_handler(enum afs_events event, __a_unused struct para_buffer *pb,
                void *data)
 {
+       int ret;
+
        if (!current_mood)
                return 0;
        switch (event) {
@@ -916,6 +918,10 @@ int moods_event_handler(enum afs_events event, __a_unused struct para_buffer *pb
        case BLOB_ADD:
                if (data == moods_table || data == playlists_table)
                        return 1; /* no reload necessary for these */
+               ret = clear_score_table();
+               if (ret < 0)
+                       PARA_CRIT_LOG("clear score table returned %s\n",
+                               para_strerror(-ret));
                return reload_current_mood();
        /* these also require reload of the score table */
        case ATTRIBUTE_ADD: