source: trunk/src/user32/new/heapshared.cpp@ 724

Last change on this file since 724 was 724, checked in by sandervl, 26 years ago

Use shared memory for class & window objects

File size: 2.9 KB
Line 
1/* $Id: heapshared.cpp,v 1.1 1999-08-28 14:09:57 sandervl Exp $ */
2/*
3 * Shared heap functions for OS/2
4 *
5 * Copyright 1999 Sander van Leeuwen (sandervl@xs4all.nl)
6 *
7 */
8#define INCL_BASE
9#define INCL_DOSMEMMGR
10#include <os2wrap.h>
11#include <misc.h>
12#include "heapshared.h"
13
14#define INITIAL_HEAPSIZE (64*1024)
15
16Heap_t sharedHeap = 0;
17PVOID pSharedMem = NULL;
18
19void * _LNK_CONV getmoreShared(Heap_t pHeap, size_t *size, int *clean);
20void _LNK_CONV releaseShared(Heap_t pHeap, void *block, size_t size);
21
22//******************************************************************************
23//******************************************************************************
24BOOL InitializeSharedHeap()
25{
26 APIRET rc;
27
28 dprintf(("USER32: InitializeSharedHeap"));
29 rc = DosAllocSharedMem(&pSharedMem, NULL, INITIAL_HEAPSIZE, PAG_READ|PAG_WRITE|PAG_COMMIT|OBJ_GIVEABLE);
30 if(rc != 0) {
31 dprintf(("InitializeSharedHeap: DosAllocSharedMem failed with %d", rc));
32 return FALSE;
33 }
34 sharedHeap = _ucreate(pSharedMem, INITIAL_HEAPSIZE, _BLOCK_CLEAN,
35 _HEAP_REGULAR|_HEAP_SHARED,
36 getmoreShared, releaseShared);
37
38 if(sharedHeap == NULL) {
39 dprintf(("InitializeSharedHeap: _ucreate failed!"));
40 return FALSE;
41 }
42 return TRUE;
43}
44//******************************************************************************
45//******************************************************************************
46void DestroySharedHeap()
47{
48 dprintf(("USER32: DestroySharedHeap"));
49 if(sharedHeap) {
50 _uclose(sharedHeap);
51 _udestroy(sharedHeap, _FORCE);
52 sharedHeap = NULL;
53 }
54 if(pSharedMem) {
55 DosFreeMem(pSharedMem);
56 pSharedMem = NULL;
57 }
58}
59//******************************************************************************
60//******************************************************************************
61void *_smalloc(size_t size)
62{
63 return _umalloc(sharedHeap, size);
64}
65//******************************************************************************
66//******************************************************************************
67void * _LNK_CONV getmoreShared(Heap_t pHeap, size_t *size, int *clean)
68{
69 APIRET rc;
70 ULONG newsize;
71 PVOID newblock;
72
73 /* round the size up to a multiple of 64K */
74 *size = (*size / 65536) * 65536 + 65536;
75
76 rc = DosAllocSharedMem(&newblock, NULL, *size, PAG_READ|PAG_WRITE|PAG_COMMIT|OBJ_GIVEABLE);
77 if(rc != 0) {
78 dprintf(("getmoreShared: DosAllocSharedMem failed with %d", rc));
79 return NULL;
80 }
81 *clean = _BLOCK_CLEAN;
82
83 return newblock;
84}
85//******************************************************************************
86//******************************************************************************
87void _LNK_CONV releaseShared(Heap_t pHeap, void *block, size_t size)
88{
89 DosFreeMem(block);
90}
91//******************************************************************************
92//******************************************************************************
Note: See TracBrowser for help on using the repository browser.