Browse Source

outheap removed

h_vogt 14 years ago
parent
commit
fc7692a896
  1. 15
      src/frontend/outitf.c
  2. 18
      src/frontend/vectors.c
  3. 98
      src/misc/alloc.c
  4. 16
      src/tclspice.c
  5. 14
      src/winmain.c

15
src/frontend/outitf.c

@ -64,15 +64,6 @@ static void freeRun(runDesc *run);
#endif #endif
/*saj*/ /*saj*/
/* plot output data shall go into extra heap
to prevent massive memory fragmentation of standard process heap.
This is especially required by TCL for Windows, but may help
also under standard Windows GUI. */
#if 0 && (defined(HAS_TCLWIN)) && ((defined(_MSC_VER) || defined(__MINGW32__)))
#define newrealloc hrealloc
#else
#define newrealloc trealloc
#endif
#define DOUBLE_PRECISION 15 #define DOUBLE_PRECISION 15
@ -1010,12 +1001,12 @@ plotAddRealValue(dataDesc *desc, double value)
struct dvec *v = desc->vec; struct dvec *v = desc->vec;
if (isreal(v)) { if (isreal(v)) {
v->v_realdata = (double *) newrealloc(v->v_realdata,
v->v_realdata = (double *) trealloc(v->v_realdata,
sizeof(double) * (size_t) (v->v_length + 1)); sizeof(double) * (size_t) (v->v_length + 1));
v->v_realdata[v->v_length] = value; v->v_realdata[v->v_length] = value;
} else { } else {
/* a real parading as a VF_COMPLEX */ /* a real parading as a VF_COMPLEX */
v->v_compdata = (ngcomplex_t *) newrealloc(v->v_compdata,
v->v_compdata = (ngcomplex_t *) trealloc(v->v_compdata,
sizeof(ngcomplex_t) * (size_t) (v->v_length + 1)); sizeof(ngcomplex_t) * (size_t) (v->v_length + 1));
v->v_compdata[v->v_length].cx_real = value; v->v_compdata[v->v_length].cx_real = value;
v->v_compdata[v->v_length].cx_imag = 0.0; v->v_compdata[v->v_length].cx_imag = 0.0;
@ -1031,7 +1022,7 @@ plotAddComplexValue(dataDesc *desc, IFcomplex value)
{ {
struct dvec *v = desc->vec; struct dvec *v = desc->vec;
v->v_compdata = (ngcomplex_t *) newrealloc(v->v_compdata,
v->v_compdata = (ngcomplex_t *) trealloc(v->v_compdata,
sizeof(ngcomplex_t) * (size_t) (v->v_length + 1)); sizeof(ngcomplex_t) * (size_t) (v->v_length + 1));
v->v_compdata[v->v_length].cx_real = value.real; v->v_compdata[v->v_length].cx_real = value.real;
v->v_compdata[v->v_length].cx_imag = value.imag; v->v_compdata[v->v_length].cx_imag = value.imag;

18
src/frontend/vectors.c

@ -22,14 +22,6 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include "plotting/plotting.h" #include "plotting/plotting.h"
#include "error.h" /* controlled_exit() */ #include "error.h" /* controlled_exit() */
#if 0 && defined(HAS_TCLWIN)
#if defined(_MSC_VER) || defined(__MINGW32__)
#undef BOOLEAN
#include <windows.h>
extern HANDLE outheap;
#endif
#endif
#ifdef XSPICE #ifdef XSPICE
/* gtri - begin - add function prototype for EVTfindvec */ /* gtri - begin - add function prototype for EVTfindvec */
struct dvec *EVTfindvec(char *node); struct dvec *EVTfindvec(char *node);
@ -821,17 +813,7 @@ vec_free_x(struct dvec *v)
} }
} }
if (v->v_name) tfree(v->v_name); if (v->v_name) tfree(v->v_name);
#if 0 && (defined(HAS_TCLWIN)) && ((defined(_MSC_VER) || defined(__MINGW32__)))
if (v->v_realdata) {
if (HeapValidate(outheap, 0, v->v_realdata))
HeapFree(outheap, 0, v->v_realdata);
else
tfree(v->v_realdata);
}
#else
if (v->v_realdata) tfree(v->v_realdata); if (v->v_realdata) tfree(v->v_realdata);
#endif
if (v->v_compdata) tfree(v->v_compdata); if (v->v_compdata) tfree(v->v_compdata);
tfree(v); tfree(v);
return; return;

98
src/misc/alloc.c

@ -14,14 +14,6 @@ Copyright 1990 Regents of the University of California. All rights reserved.
#include <tcl.h> #include <tcl.h>
#endif #endif
#if defined(HAS_WINDOWS) || (defined(HAS_TCLWIN) && 0)
#if defined(_MSC_VER) || defined(__MINGW32__)
#undef BOOLEAN
#include <windows.h>
extern HANDLE outheap;
#endif
#endif
/* Malloc num bytes and initialize to zero. Fatal error if the space can't /* Malloc num bytes and initialize to zero. Fatal error if the space can't
* be tmalloc'd. Return NULL for a request for 0 bytes. * be tmalloc'd. Return NULL for a request for 0 bytes.
*/ */
@ -55,53 +47,6 @@ tmalloc(size_t num)
return(s); return(s);
} }
/* Original Berkeley Implementation */
/*
void *
tmalloc(size_t num)
{
void *s;
if (!num)
return NULL;
s = malloc((unsigned) num);
if (!s) {
fprintf(stderr,
"malloc: Internal Error: can't allocate %d bytes.\n", num);
exit(EXIT_BAD);
}
bzero(s, num);
return(s);
}
void *
trealloc(void *str, size_t num)
{
void *s;
if (!num) {
if (str)
free(str);
return NULL;
}
if (!str)
s = tmalloc(num);
else
s = realloc(str, (unsigned) num);
if (!s) {
fprintf(stderr,
"realloc: Internal Error: can't allocate %d bytes.\n", num);
exit(EXIT_BAD);
}
return(s);
}
*/
void * void *
trealloc(void *ptr, size_t num) trealloc(void *ptr, size_t num)
@ -138,49 +83,6 @@ trealloc(void *ptr, size_t num)
return(s); return(s);
} }
/* realloc using the output heap.
Function is used in outitf.c to prevent heap fragmentation
An additional heap outheap is used to store the plot output data.
*/
#if 0 && defined(HAS_TCLWIN)
#if defined(_MSC_VER) || defined(__MINGW32__)
void *
hrealloc(void *ptr, size_t num)
{
void *s;
/*saj*/
#ifdef TCL_MODULE
Tcl_Mutex *alloc;
alloc = Tcl_GetAllocMutex();
#endif
if (!num) {
if (ptr)
free(ptr);
return NULL;
}
if (!ptr)
s = HeapAlloc(outheap, HEAP_ZERO_MEMORY, num);
else {
/*saj*/
#ifdef TCL_MODULE
Tcl_MutexLock(alloc);
#endif
s = HeapReAlloc(outheap, HEAP_ZERO_MEMORY, ptr, num);
/*saj*/
#ifdef TCL_MODULE
Tcl_MutexUnlock(alloc);
#endif
}
if (!s) {
fprintf(stderr,"HeapReAlloc: Internal Error: can't allocate %ld bytes.\n", (long)num);
exit(EXIT_FAILURE);
}
return(s);
}
#endif
#endif
void void
txfree(void *ptr) txfree(void *ptr)

16
src/tclspice.c

@ -179,12 +179,6 @@ do {\
} while(0) } while(0)
/* global handle for the output heap */
#if defined(_MSC_VER) || defined(__MINGW32__)
HANDLE outheap;
#endif
void tcl_stdflush(FILE *f); void tcl_stdflush(FILE *f);
int tcl_vfprintf(FILE *f, const char *fmt, va_list args); int tcl_vfprintf(FILE *f, const char *fmt, va_list args);
#if defined(__MINGW32__) || defined(_MSC_VER) #if defined(__MINGW32__) || defined(_MSC_VER)
@ -2243,16 +2237,6 @@ int Spice_Init(Tcl_Interp *interp) {
save_interp(); save_interp();
#if 0 && (defined(_MSC_VER) || defined(__MINGW32__))
/* create private heap for current process*/
outheap = HeapCreate(0, 10000000, 0);
if (!outheap) {
fprintf(stderr,"HeapCreate: Internal Error: can't allocate private output heap");
exit(EXIT_BAD);
}
#endif
{ {
int i; int i;
char *key; char *key;

14
src/winmain.c

@ -104,8 +104,6 @@ void winmessage(char*);
int p_r_i_n_t_f(const char * __format, ...); int p_r_i_n_t_f(const char * __format, ...);
int f_f_l_u_s_h( FILE * __stream); */ int f_f_l_u_s_h( FILE * __stream); */
/* private heap for storing plot data */
HANDLE outheap;
/* --------------------------<history management>------------------------------ */ /* --------------------------<history management>------------------------------ */
@ -931,17 +929,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
UpdateWindow( hwMain); UpdateWindow( hwMain);
SetFocus( swString); SetFocus( swString);
status = MakeArgcArgv(lpszCmdLine,&argc,&argv);
#if defined(HAS_TCLWIN)
/* create private heap for current process */
outheap = HeapCreate(0, 10000000, 0);
if (!outheap) {
fprintf(stderr,"HeapCreate: Internal Error: can't allocate private output heap");
winmessage("HeapCreate: Internal Error: can't allocate private output heap");
exit(1);
}
#endif
status = MakeArgcArgv(lpszCmdLine,&argc,&argv);
/* Wait until everything is settled */ /* Wait until everything is settled */
WaitForIdle(); WaitForIdle();

Loading…
Cancel
Save