Ignore:
Timestamp:
Dec 29, 1999, 9:36:10 AM (26 years ago)
Author:
phaller
Message:

Fix: memory leak in Dart thread callback functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/winmm/dwaveout.cpp

    r1463 r2242  
    1 /* $Id: dwaveout.cpp,v 1.10 1999-10-26 22:47:23 phaller Exp $ */
     1/* $Id: dwaveout.cpp,v 1.11 1999-12-29 08:33:55 phaller Exp $ */
    22
    33/*
     
    4949/******************************************************************************/
    5050/******************************************************************************/
    51 DartWaveOut::DartWaveOut(LPWAVEFORMATEX pwfx, ULONG nCallback, ULONG dwInstance)
     51DartWaveOut::DartWaveOut(LPWAVEFORMATEX pwfx, ULONG nCallback, ULONG dwInstance, USHORT usSel)
    5252{
    5353   Init(pwfx);
    5454
    55    mthdCallback         = (LPDRVCALLBACK)nCallback;
     55   mthdCallback         = (LPDRVCALLBACK)nCallback; // callback function
     56   selCallback          = usSel;                    // callback win32 tib selector
    5657   this->dwInstance = dwInstance;
    5758
     
    7475void DartWaveOut::callback(HDRVR h, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2)
    7576{
    76   USHORT selTIB = SetWin32TIB();
     77  USHORT selTIB = GetFS(); // save current FS selector
     78
     79  dprintf(("WINMM:DartWaveOut::callback(HDRVR h=%08xh, UINT uMessage=%08xh, DWORD dwUser=%08xh, DWORD dw1=%08xh, DWORD dw2=%08xh)\n",
     80           h,
     81           uMessage,
     82           dwUser,
     83           dw1,
     84           dw2));
     85
     86  if (selCallback != 0)
     87    SetFS(selCallback);      // switch to callback win32 tib selector (stored in waveOutOpen)
     88  else
     89    dprintf(("WINMM:DartWaveOut::callback - selCallback is invalid"));
     90
     91  //@@@PH 1999/12/28 Shockwave Flashes seem to make assumptions on a
     92  // specific stack layout. Do we have the correct calling convention here?
    7793  mthdCallback(h,uMessage,dwUser,dw1,dw2);
    78   SetFS(selTIB);
     94  SetFS(selTIB);           // switch back to the saved FS selector
    7995}
    8096/******************************************************************************/
     
    94110   mthdCallback  = NULL;
    95111   hwndCallback  = 0;
     112   selCallback   = 0;
    96113   dwInstance    = 0;
    97114   ulError       = 0;
     115   selCallback   = 0;
    98116   State         = STATE_STOPPED;
    99117
     
    695713/******************************************************************************/
    696714/******************************************************************************/
    697 LONG APIENTRY WaveOutHandler(ULONG ulStatus, PMCI_MIX_BUFFER pBuffer,
     715LONG APIENTRY WaveOutHandler(ULONG ulStatus,
     716                             PMCI_MIX_BUFFER pBuffer,
    698717                             ULONG ulFlags)
    699718{
    700  DartWaveOut *dwave;
    701  PTIB ptib;
    702  PPIB ppib;
    703 
    704   DosGetInfoBlocks(&ptib, &ppib);
    705 //  dprintf(("WaveOutHandler: thread %d prio %X", ptib->tib_ptib2->tib2_ultid, ptib->tib_ptib2->tib2_ulpri));
    706   if(pBuffer && pBuffer->ulUserParm) {
     719  // PTIB ptib;
     720  // PPIB ppib;
     721  // DosGetInfoBlocks(&ptib, &ppib);
     722  // dprintf(("WaveOutHandler: thread %d prio %X", ptib->tib_ptib2->tib2_ultid, ptib->tib_ptib2->tib2_ulpri));
     723
     724  DartWaveOut *dwave;
     725
     726  if(pBuffer && pBuffer->ulUserParm)
     727  {
    707728    dwave = (DartWaveOut *)pBuffer->ulUserParm;
    708729    dwave->handler(ulStatus, pBuffer, ulFlags);
Note: See TracChangeset for help on using the changeset viewer.