openbsd-ports/devel/opencm/patches.nogc/patch-base_src_server_opencmserver_c
todd 31057a08c0 update to 0.1.2alpha5pl2 from 0.1.0alpha18
see http://www.opencm.org/news.html for hilights of this update, major
noteworthy changes include:

- sxd has gone away, gzfs is 'interim' while 'sxd2' is almost ready
- if you have an old sxd repository, read the mailing list archives for
  how to update (use an interum version)
- an incompatible update to the server/client protocol requires that you
  update both at the same time

(as a reminder, this is 'alpha' and as such is subject to incompatible changes
 like the above.  expect more to come when sxd2 emerges)

Also, add a 'nogc' flavor that removes the dependency on boehm-gc, at the
cost of not free()'ing all memory allocated (read: at the moment, most).
2003-05-23 13:22:14 +00:00

114 lines
3.4 KiB
Plaintext

$OpenBSD: patch-base_src_server_opencmserver_c,v 1.1 2003/05/23 13:22:14 todd Exp $
--- base/src/server/opencmserver.c.orig Tue Apr 22 10:28:07 2003
+++ base/src/server/opencmserver.c Thu May 22 17:46:43 2003
@@ -54,35 +54,6 @@ static int max_fd_so_far;
/* defined in globals.h: */
int num_active_clients = 0;
-static void
-report_gc_statistics()
-{
- static size_t last_stats[5] = { 0 };
- size_t stats_now[4];
- int j, stats_changed = 0;
-
- stats_now[0] = GC_get_heap_size();
- stats_now[1] = GC_get_free_bytes();
- stats_now[2] = GC_get_total_bytes();
- stats_now[3] = GC_get_bytes_since_gc();
-
- last_stats[4] += GC_get_bytes_since_gc();
-
- for(j = 0; j != 4; j++)
- if(stats_now[j] != last_stats[j])
- stats_changed = 1;
-
- for(j = 0; j != 4; j++)
- last_stats[j] = stats_now[j];
-
- /* Only make a report if something has changed since the last report */
- if(!stats_changed)
- return;
-
- log_trace(DBG_GC, "GC: heap=%d free=%d tot_alloc=%d tot_free=%d since_last_gc=%d\n",
- stats_now[0], stats_now[1], stats_now[2], last_stats[4], stats_now[3]);
-}
-
static void
dump_channels(int sigid)
{
@@ -302,12 +273,8 @@ svr_GetRequest(Channel *c)
}
svr_DoRequest(c, request);
- strm = 0; /* GC */
- request = 0; /* GC */
-
- /* Make sure to disable this if you're using reporting, since the GC free
- statistics will get lost -JL */
- GC_gcollect();
+ free(strm);
+ free(request);
/* Restore the Channel's read callback
* because the client is probably going to have
@@ -327,7 +294,7 @@ send_reply(Channel *c, Reply *reply)
/* Make sure this buffer is malloc'd: chan_awrite() relies
* on the buffer pointer's validity well beyond the scope of this
* local declaration block. */
- char *totbuf = (char *)GC_MALLOC_ATOMIC(sizeof(reqlen_t));
+ char *totbuf = (char *)malloc(sizeof(reqlen_t));
reply_strm = stream_createBuffer(SDR_WIRE);
sdr_write(SERVERREPLY, reply_strm, reply);
@@ -581,10 +548,9 @@ svr_DoClientSetup(Channel *c)
return;
}
- log_trace(TRC_COMM, "%s: Accepted connect from %s (connection id=%d, heap=%d)\n",
+ log_trace(TRC_COMM, "%s: Accepted connect from %s (connection id=%d)\n",
os_GetISOTime(),
- pubkey_GetEmail(c->peerCert), c->connection_id,
- GC_get_heap_size());
+ pubkey_GetEmail(c->peerCert), c->connection_id);
chan_aread(c, sizeof(reqlen_t), svr_StartSession);
}
@@ -612,7 +578,6 @@ opencm_server(WorkSpace *ws, int argc, c
int u;
Channel *listenChan;
struct timeval tv;
- size_t heap_size;
/* Become a daemon unless debugging has been requested: */
if (opt_Foreground)
@@ -702,28 +667,6 @@ opencm_server(WorkSpace *ws, int argc, c
tv.tv_sec = 0;
tv.tv_usec = 250000;
(void) chan_select(activeChannels, max_fd_so_far, &tv);
-
- report_gc_statistics();
-
- GC_gcollect();
-
-#ifdef MEMLEAK_PATCH
- /* Temporary: if GC_get_heap_size() > HEAPLIMIT then terminate
- svr as long as there are no active channels
- */
- heap_size = GC_get_heap_size();
- svr_memory_error = heap_size > HEAP_LIMIT;
-
- if (svr_memory_error) {
- log_trace(ERR_GC, "** GC heap exceeded: limit = 0x%08x current = 0x%08x "
- " active clients = %d\n", HEAP_LIMIT, heap_size,
- num_active_clients);
-
- /* If no outstanding requests, terminate: */
- if (num_active_clients <= 0)
- svr_Cleanup();
- }
-#endif
}
DEFAULT(ex) {