Rev 553 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 553 | Rev 704 | ||
---|---|---|---|
Line 27... | Line 27... | ||
27 | * Description: Implementation of near _heapmin() and _nheapmin(). |
27 | * Description: Implementation of near _heapmin() and _nheapmin(). |
28 | * |
28 | * |
29 | ****************************************************************************/ |
29 | ****************************************************************************/ |
Line 30... | Line -... | ||
30 | - | ||
31 | 30 | ||
32 | //#include "dll.h" // needs to be first |
31 | |
33 | #include "variety.h" |
32 | #include "variety.h" |
34 | #include |
33 | #include |
35 | #include |
34 | #include |
36 | #include |
35 | #include |
37 | #include "heap.h" |
36 | #include "heap.h" |
38 | #include "heapacc.h" |
37 | #include "heapacc.h" |
39 | #if defined(__DOS_EXT__) |
38 | #if defined(__DOS_EXT__) |
40 | // #include "extender.h" |
39 | // #include "extender.h" |
41 | #endif |
- | |
42 | #if defined(__WINDOWS_286__) || defined(__NT__) |
40 | #endif |
43 | int _stdcall UserFree(void* p); |
41 | #if defined(__WINDOWS_286__) || defined(__NT__) |
44 | // #include "windows.h" |
42 | #include "kolibri.h" |
45 | #endif |
43 | #endif |
46 | #if defined(__OS2__) |
44 | #if defined(__OS2__) |
47 | // #include |
45 | // #include |
Line 75... | Line 73... | ||
75 | #if defined(__WARP__) || \ |
73 | #if defined(__WARP__) || \ |
76 | defined(__WINDOWS_286__) || \ |
74 | defined(__WINDOWS_286__) || \ |
77 | defined(__WINDOWS_386__) || \ |
75 | defined(__WINDOWS_386__) || \ |
78 | defined(__NT__) || \ |
76 | defined(__NT__) || \ |
79 | defined(__CALL21__) |
77 | defined(__CALL21__) |
80 | static int __ReturnMemToSystem( mheapptr mhp ) |
- | |
81 | { |
- | |
82 | mheapptr pnext; |
- | |
83 | - | ||
84 | pnext = mhp->next; |
- | |
85 | #if defined(__WARP__) |
- | |
86 | if( DosFreeMem( (PBYTE)mhp ) ) return( -1 ); |
- | |
87 | #elif defined(__NT__) |
- | |
88 | //if( LocalFree( (HLOCAL)mhp ) != NULL ) return( -1 ); |
- | |
89 | // if (!VirtualFree(mhp, 0, MEM_RELEASE)) |
- | |
90 | // return -1; |
- | |
91 | if(!UserFree(mhp)) |
- | |
92 | return -1; |
- | |
93 | - | ||
94 | #elif defined(__WINDOWS_386__) |
- | |
95 | if( DPMIFree( (unsigned long)mhp ) != 0 ) return( -1 ); |
- | |
96 | #elif defined(__WINDOWS_286__) |
- | |
97 | if( LocalFree( (HLOCAL)mhp ) != NULL ) return( -1 ); |
- | |
98 | #elif defined(__CALL21__) |
- | |
99 | // No way to free storage under OSI |
- | |
100 | if( mhp ) return( -1 ); |
- | |
101 | #endif |
- | |
102 | if( __MiniHeapRover == mhp ) { // Update rovers |
- | |
103 | if( pnext ) { |
- | |
104 | __MiniHeapRover = pnext; |
- | |
105 | } else { |
- | |
106 | __MiniHeapRover = __nheapbeg; |
- | |
107 | __LargestSizeB4MiniHeapRover = 0; |
- | |
108 | } |
- | |
109 | } |
- | |
110 | if( __MiniHeapFreeRover == mhp ) { |
- | |
111 | __MiniHeapFreeRover = 0; |
- | |
112 | } |
- | |
113 | return( 0 ); // success |
- | |
114 | } |
- | |
Line 115... | Line 78... | ||
115 | 78 | ||
116 | static void __ReleaseMiniHeap( mheapptr mhp ) |
79 | static void __ReleaseMiniHeap( mheapptr mhp ) |
117 | { |
80 | { |
118 | mheapptr pprev; |
81 | mheapptr pprev; |
Line 119... | Line 82... | ||
119 | mheapptr pnext; |
82 | mheapptr pnext; |
120 | 83 | ||
121 | pprev = mhp->prev; |
84 | pprev = mhp->prev; |
122 | pnext = mhp->next; |
85 | pnext = mhp->next; |
123 | if( __ReturnMemToSystem( mhp ) == 0 ) { |
86 | if( user_free( mhp ) == 1 ) { |
124 | if( pprev == NULL ) { |
87 | if( pprev == NULL ) { |
125 | __nheapbeg = pnext; |
88 | __nheapbeg = pnext; |
126 | } else { |
89 | } else { |