* database.c: Removed arbitrary limit on maximum number of sessions
authorArt Cancro <ajc@citadel.org>
Fri, 29 Oct 1999 01:48:45 +0000 (01:48 +0000)
committerArt Cancro <ajc@citadel.org>
Fri, 29 Oct 1999 01:48:45 +0000 (01:48 +0000)
citadel/ChangeLog
citadel/database.c

index 4f18c04be64f83d06b778338e709f6a702a7a37e..4c375874e54003fb22bb14d14ffcdede104dd5df 100644 (file)
@@ -1,4 +1,7 @@
 $Log$
+Revision 1.403  1999/10/29 01:48:45  ajc
+* database.c: Removed arbitrary limit on maximum number of sessions
+
 Revision 1.402  1999/10/29 01:03:03  ajc
 * Debugged all possible ways for a session to terminate; do them cleanly.
 * Assign session numbers in a more portable and less arbitrary way.
@@ -1388,4 +1391,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncnsrd.mt-kisco.ny.us>
        * Initial CVS import 
-
index 79ae1981344ccdd24c7b36b0f556370626e718ac..2f2df05acb358c355de0a15e1255da158dd2c7d0 100644 (file)
 GDBM_FILE gdbms[MAXCDB];
 
 /*
- * We also keep these around, for sequential searches... (one per 
- * session.  Maybe there's a better way?)    FIX ... there _is_ a better
- * way.  We have TSD functions now; use them.
+ * We also keep these around, for sequential searches (one per session slot)
  */
-#define MAXKEYS 256
-datum dtkey[MAXKEYS];
+int max_keys = 0;
+datum *dtkey;
 
 
 /*
@@ -93,8 +91,6 @@ void defrag_databases(void) {
  * does not exist should be created.
  */
 void open_databases(void) {
-       int a;
-
        lprintf(7, "%s\n", gdbm_version);
 
        /*
@@ -158,11 +154,6 @@ void open_databases(void) {
                exit(1);
                }
 
-       for (a=0; a<MAXKEYS; ++a) {
-               dtkey[a].dsize = 0;
-               dtkey[a].dptr = NULL;
-               }
-
        /*
        end_critical_section(S_DATABASE);
         */
@@ -184,7 +175,7 @@ void close_databases(void) {
                }
        end_critical_section(S_DATABASE);
 
-       for (a=0; a<MAXKEYS; ++a) {
+       for (a=0; a<max_keys; ++a) {
                if (dtkey[a].dptr != NULL) {
                        phree(dtkey[a].dptr);
                        }
@@ -291,6 +282,20 @@ void cdb_free(struct cdbdata *cdb) {
  */
 void cdb_rewind(int cdb) {
 
+       while (max_keys <= CC->cs_pid) {
+               ++max_keys;
+               if (dtkey == NULL) {
+                       dtkey = (datum *)
+                               mallok( (sizeof(datum) * max_keys) );
+               }
+               else {
+                       dtkey = (datum *)
+                               reallok(dtkey, (sizeof(datum) * max_keys) );
+               }
+               dtkey[max_keys - 1].dsize = 0;
+               dtkey[max_keys - 1].dptr = NULL;
+       }
+
        if (dtkey[CC->cs_pid].dptr != NULL) {
                phree(dtkey[CC->cs_pid].dptr);
                }