Ignore:
Timestamp:
Sep 21, 2000, 9:44:32 PM (25 years ago)
Author:
sandervl
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/wintls.cpp

    r4285 r4298  
    1 /* $Id: wintls.cpp,v 1.12 2000-09-20 21:32:54 hugh Exp $ */
     1/* $Id: wintls.cpp,v 1.13 2000-09-21 19:39:57 sandervl Exp $ */
    22/*
    33 * Win32 TLS API functions
     
    2525{
    2626   if(!tlsAddress)
    27   return;
     27        return;
    2828
    2929   tlsIndex = TlsAlloc();
    3030   if(tlsIndex >= TLS_MINIMUM_AVAILABLE) {
    31   dprintf(("tlsAttachThread: invalid tlsIndex %x!!!!", tlsIndex));
    32   DebugInt3();
    33   return;
     31        dprintf(("tlsAttachThread: invalid tlsIndex %x!!!!", tlsIndex));
     32        DebugInt3();
     33        return;
    3434   }
    3535   dprintf(("Win32ImageBase::tlsAlloc (%d) for module %x", tlsIndex, hinstance));
     
    4040{
    4141   if(!tlsAddress)
    42   return;
     42        return;
    4343
    4444   if(tlsIndex >= TLS_MINIMUM_AVAILABLE) {
    45   dprintf(("tlsAttachThread: invalid tlsIndex %x!!!!", tlsIndex));
    46   DebugInt3();
    47   return;
     45        dprintf(("tlsAttachThread: invalid tlsIndex %x!!!!", tlsIndex));
     46        DebugInt3();
     47        return;
    4848   }
    4949   dprintf(("Win32ImageBase::tlsDestroy (%d) for module %x", tlsIndex, hinstance));
     
    6060
    6161   if(!tlsAddress)
    62   return;
     62        return;
    6363
    6464   if(tlsIndex >= TLS_MINIMUM_AVAILABLE) {
    65   dprintf(("tlsAttachThread: invalid tlsIndex %x!!!!", tlsIndex));
    66   DebugInt3();
    67   return;
     65        dprintf(("tlsAttachThread: invalid tlsIndex %x!!!!", tlsIndex));
     66        DebugInt3();
     67        return;
    6868   }
    6969
     
    7777   tibmem = VirtualAlloc(0, tlsTotalSize, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
    7878   if(tibmem == NULL) {
    79   dprintf(("tlsAttachThread: tibmem == NULL!!!!"));
    80   DebugInt3();
    81   return;
     79        dprintf(("tlsAttachThread: tibmem == NULL!!!!"));
     80        DebugInt3();
     81        return;
    8282   }
    8383   memset(tibmem, 0, tlsTotalSize);
     
    8888
    8989   if(tlsCallBackAddr && (ULONG)*tlsCallBackAddr != 0) {
    90   pCallback = tlsCallBackAddr;
    91   while(*pCallback) {
    92     dprintf(("tlsAttachThread: calling TLS Callback %x", *pCallback));
    93 
    94     (*pCallback)((LPVOID)hinstance, DLL_THREAD_ATTACH, 0);
    95 
    96     dprintf(("tlsAttachThread: finished calling TLS Callback %x", *pCallback));
    97     *pCallback++;
    98   }
     90        pCallback = tlsCallBackAddr;
     91        while(*pCallback) {
     92            dprintf(("tlsAttachThread: calling TLS Callback %x", *pCallback));
     93
     94            (*pCallback)((LPVOID)hinstance, DLL_THREAD_ATTACH, 0);
     95
     96            dprintf(("tlsAttachThread: finished calling TLS Callback %x", *pCallback));
     97            *pCallback++;
     98        }
    9999   }
    100100   return;
     
    109109
    110110   if(!tlsAddress)
    111   return;
     111        return;
    112112
    113113   dprintf(("Win32ImageBase::tlsDetachThread for module %x, thread id %x", hinstance, GetCurrentThreadId()));
    114114
    115115   if(tlsCallBackAddr && (ULONG)*tlsCallBackAddr != 0) {
    116   pCallback = tlsCallBackAddr;
    117   while(*pCallback) {
    118     dprintf(("tlsDetachThread: calling TLS Callback %x", *pCallback));
    119 
    120     (*pCallback)((LPVOID)hinstance, DLL_THREAD_DETACH, 0);
    121 
    122     dprintf(("tlsDetachThread: finished calling TLS Callback %x", *pCallback));
    123     *pCallback++;
    124   }
     116        pCallback = tlsCallBackAddr;
     117        while(*pCallback) {
     118            dprintf(("tlsDetachThread: calling TLS Callback %x", *pCallback));
     119
     120            (*pCallback)((LPVOID)hinstance, DLL_THREAD_DETACH, 0);
     121
     122            dprintf(("tlsDetachThread: finished calling TLS Callback %x", *pCallback));
     123            *pCallback++;
     124        }
    125125   }
    126126   tlsmem = TlsGetValue(tlsIndex);
    127127   if(tlsmem) {
    128     VirtualFree(tlsmem, tlsTotalSize, MEM_RELEASE);
     128        VirtualFree(tlsmem, tlsTotalSize, MEM_RELEASE);
    129129   }
    130130   else {
    131   dprintf(("ERROR: tlsDetachThread: tlsmem == NULL!!!"));
     131        dprintf(("ERROR: tlsDetachThread: tlsmem == NULL!!!"));
    132132   }
    133133   TlsFree(tlsIndex);
     
    154154  tibidx = 0;
    155155  if(pdb->tls_bits[0] == 0xFFFFFFFF) {
    156     if(pdb->tls_bits[1] == 0xFFFFFFFF) {
    157       LeaveCriticalSection(&pdb->crit_section);
    158       SetLastError(ERROR_NO_MORE_ITEMS);  //TODO: correct error?
    159     return -1;
    160   }
    161   tibidx = 1;
     156        if(pdb->tls_bits[1] == 0xFFFFFFFF) {
     157            LeaveCriticalSection(&pdb->crit_section);
     158            SetLastError(ERROR_NO_MORE_ITEMS);  //TODO: correct error?
     159            return -1;
     160        }
     161        tibidx = 1;
    162162  }
    163163  for(i=0;i<32;i++) {
    164   mask = (1 << i);
    165   if((pdb->tls_bits[tibidx] & mask) == 0) {
    166     pdb->tls_bits[tibidx] |= mask;
    167     index = (tibidx*32) + i;
    168     break;
    169   }
     164        mask = (1 << i);
     165        if((pdb->tls_bits[tibidx] & mask) == 0) {
     166            pdb->tls_bits[tibidx] |= mask;
     167            index = (tibidx*32) + i;
     168            break;
     169        }
    170170  }
    171171  LeaveCriticalSection(&pdb->crit_section);
     
    205205  if(pdb->tls_bits[tlsidx] & mask) {
    206206        LeaveCriticalSection(&pdb->crit_section);
    207   pdb->tls_bits[tlsidx] &= ~mask;
     207        pdb->tls_bits[tlsidx] &= ~mask;
    208208        thdb->tls_array[index] = 0;
    209209        SetLastError(ERROR_SUCCESS);
    210   return TRUE;
     210        return TRUE;
    211211  }
    212212  LeaveCriticalSection(&pdb->crit_section);
Note: See TracChangeset for help on using the changeset viewer.