Remove connection_freelist
[pazpar2-moved-to-github.git] / src / logic.c
index d4db2e1..f6f6cbd 100644 (file)
@@ -297,7 +297,7 @@ void session_settings_dump(struct session *se,
 // Will be extended to take into account user associated with session
 const char *session_setting_oneval(struct session_database *db, int offset)
 {
-    if (!db->settings[offset])
+    if (offset >= db->num_settings || !db->settings[offset])
         return "";
     return db->settings[offset]->value;
 }
@@ -491,7 +491,8 @@ enum pazpar2_error_code search(struct session *se,
         {
             no_working++;
             if (client_prep_connection(cl, se->service->z3950_operation_timeout,
-                                       se->service->z3950_session_timeout))
+                                       se->service->z3950_session_timeout,
+                                       se->service->server->iochan_man))
                 client_start_search(cl);
         }
     }
@@ -523,7 +524,10 @@ static void session_init_databases_fun(void *context, struct database *db)
                                 sizeof(struct settings *) * db->num_settings);
     new->num_settings = db->num_settings;
     for (i = 0; i < db->num_settings; i++)
-        new->settings[i] = db->settings[i];
+    {
+        struct setting *setting = db->settings[i];
+        new->settings[i] = setting;
+    }
     new->next = se->databases;
     se->databases = new;
 }
@@ -547,11 +551,12 @@ void session_init_databases(struct session *se)
 static struct session_database *load_session_database(struct session *se, 
                                                       char *id)
 {
-    struct database *db = find_database(id, se->service);
+    struct database *db = new_database(id, se->session_nmem);
 
-    resolve_database(db);
+    resolve_database(se->service, db);
 
     session_init_databases_fun((void*) se, db);
+
     // New sdb is head of se->databases list
     return se->databases;
 }
@@ -806,27 +811,6 @@ void statistics(struct session *se, struct statistics *stat)
     stat->num_clients = count;
 }
 
-
-// Master list of connections we're handling events to
-static iochan_man_t pazpar2_chan_man = 0; /* thread pr */
-
-void pazpar2_chan_man_start(void)
-{
-    pazpar2_chan_man = iochan_man_create(0 /* use threads */);
-}
-
-void pazpar2_add_channel(IOCHAN chan)
-{
-    assert(pazpar2_chan_man);
-    iochan_add(pazpar2_chan_man, chan);
-}
-
-void pazpar2_event_loop()
-{
-    assert(pazpar2_chan_man);
-    iochan_man_events(pazpar2_chan_man);
-}
-
 static struct record_metadata *record_metadata_init(
     NMEM nmem, const char *value, enum conf_metadata_type type,
     struct _xmlAttr *attr)