Subversion Repositories Kolibri OS

Rev

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 {