Merge branch 'master' into paz-927
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 8 Sep 2014 12:33:05 +0000 (14:33 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 8 Sep 2014 12:33:05 +0000 (14:33 +0200)
1  2 
src/session.c

diff --combined src/session.c
@@@ -508,6 -508,7 +508,6 @@@ static void select_targets_callback(str
          l->next = se->clients_cached;
          se->clients_cached = l;
      }
 -    /* set session always. If may be 0 if client is not active */
      client_set_session(cl, se);
  
      l = xmalloc(sizeof(*l));
@@@ -556,7 -557,6 +556,7 @@@ static void session_remove_cached_clien
          client_lock(l->client);
          client_set_session(l->client, 0);
          client_set_database(l->client, 0);
 +        client_mark_dead(l->client);
          client_unlock(l->client);
          client_destroy(l->client);
          xfree(l);
@@@ -908,35 -908,36 +908,36 @@@ static struct session_database *find_se
  void session_apply_setting(struct session *se, char *dbname, char *name,
                             char *value)
  {
-     struct session_database *sdb = find_session_database(se, dbname);
-     struct conf_service *service = se->service;
-     struct setting *s;
-     int offset = settings_create_offset(service, name);
-     expand_settings_array(&sdb->settings, &sdb->num_settings, offset,
-                           se->session_nmem);
-     // Force later recompute of settings-driven data structures
-     // (happens when a search starts and client connections are prepared)
-     if (offset == PZ_XSLT)
-         sdb->map = 0;
-     se->settings_modified = 1;
-     for (s = sdb->settings[offset]; s; s = s->next)
-         if (!strcmp(s->name, name) &&
-             dbname && s->target && !strcmp(dbname, s->target))
+     session_enter(se, "session_apply_setting");
+     {
+         struct session_database *sdb = find_session_database(se, dbname);
+         struct conf_service *service = se->service;
+         struct setting *s;
+         int offset = settings_create_offset(service, name);
+         expand_settings_array(&sdb->settings, &sdb->num_settings, offset,
+                               se->session_nmem);
+         // Force later recompute of settings-driven data structures
+         // (happens when a search starts and client connections are prepared)
+         if (offset == PZ_XSLT)
+             sdb->map = 0;
+         se->settings_modified = 1;
+         for (s = sdb->settings[offset]; s; s = s->next)
+             if (!strcmp(s->name, name) &&
+                 dbname && s->target && !strcmp(dbname, s->target))
+                 break;
+         if (!s)
          {
-             s->value = value;
-             return;
+             s = nmem_malloc(se->session_nmem, sizeof(*s));
+             s->precedence = 0;
+             s->target = dbname;
+             s->name = name;
+             s->next = sdb->settings[offset];
+             sdb->settings[offset] = s;
          }
-     s = nmem_malloc(se->session_nmem, sizeof(*s));
-     s->precedence = 0;
-     s->target = dbname;
-     s->name = name;
-     s->value = value;
-     s->next = sdb->settings[offset];
-     sdb->settings[offset] = s;
+         s->value = value;
+     }
+     session_leave(se, "session_apply_setting");
  }
  
  void session_destroy(struct session *se)