--- parser3/src/main/pa_memory.C 2003/02/21 10:58:57 1.1.2.2 +++ parser3/src/main/pa_memory.C 2017/11/15 22:48:58 1.15 @@ -1,117 +1,32 @@ /** @file Parser: memory reference counting classes. - Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_MEMORY_C="$Date: 2003/02/21 10:58:57 $"; - -#include "pa_pool.h" -#include "pa_exception.h" -#include "pa_common.h" #include "pa_sapi.h" +#include "pa_common.h" -void *pa_fail_alloc(char *what, size_t size) { - SAPI::die("out of memory: failed to %s %u bytes", - what, size); +volatile const char * IDENT_PA_MEMORY_C="$Id: pa_memory.C,v 1.15 2017/11/15 22:48:58 moko Exp $" IDENT_PA_MEMORY_H; +void *pa_fail_alloc(const char* what, size_t size) { +#ifdef PA_DEBUG_DISABLE_GC + SAPI::die("out of memory (in pa_fail_alloc)"); +#else + SAPI::die("out of memory: failed to %s %u bytes. heap_used=%u, heap_free=%u, bytes_since_gc=%u, total_bytes=%u", + what, size, GC_get_heap_size(), GC_get_free_bytes(), GC_get_bytes_since_gc(), GC_get_total_bytes()); +#endif // never reached return 0; } -/* -Pool::Pool(void *astorage) : - fstorage(astorage), fcontext(0), - ftotal_allocated(0), ftotal_times(0), - source_charset(0), client_charset(0) - { -} - -void *Pool::copy(const void *buf, const size_t size) { - if(!buf || !size) - return 0; - - void *result=malloc(size); - memcpy(result, buf, size); - return result; -} - -char *Pool::copy(const char* cstr) { - if(cstr) { - size_t size=strlen(cstr)+1; - return (char *)copy(cstr, size); - } +#ifdef _MSC_VER +extern "C" void *pa_fail_alloc(const char* what); +void *pa_fail_alloc(const char* what) { + SAPI::die("fatal memory error: %s. heap_used=%u, heap_free=%u, bytes_since_gc=%u, total_bytes=%u", + what, GC_get_heap_size(), GC_get_free_bytes(), GC_get_bytes_since_gc(), GC_get_total_bytes()); + // never reached return 0; } - - -void Pool::fail_alloc(size_t size) const { - SAPI::die("out of pool memory: failed to allocate %u bytes; " - "already allocated on pool: %u bytes in %u times", - size, - ftotal_allocated, ftotal_times); -} - -void Pool::fail_register_cleanup() const { - SAPI::die("failed to register cleanup"); -} - -void Pool::set_source_charset(Charset& acharset) { - source_charset=&acharset; -} -Charset& Pool::get_source_charset() { - if(!source_charset) - throw Exception(0, - 0, - "no source charset defined yet"); - return *source_charset; -} - -void Pool::set_client_charset(Charset& acharset) { - client_charset=&acharset; -} -Charset& Pool::get_client_charset() { - if(!client_charset) - throw Exception(0, - 0, - "no client charset defined yet"); - return *client_charset; -} - -#ifdef XML - -const char* Pool::transcode_cstr(xmlChar *s) { - return get_source_charset().transcode_cstr(s); -} - -String& Pool::transcode(xmlChar *s -#ifndef NO_STRING_ORIGIN - , const String *origin #endif - ) { - return get_source_charset().transcode(s, origin); -} - -const char* Pool::transcode_cstr(GdomeDOMString *s) { - return get_source_charset().transcode_cstr(s); -} - -String& Pool::transcode(GdomeDOMString *s -#ifndef NO_STRING_ORIGIN - , const String *origin -#endif - ) { - return get_source_charset().transcode(s, origin); -} - -xmlChar *Pool::transcode_buf2xchar(const char* buf, size_t buf_size) { - return get_source_charset().transcode_buf2xchar(buf, buf_size); -} - -GdomeDOMString_auto_ptr Pool::transcode(const String& s) { - return get_source_charset().transcode(s); -} - -#endif -*/