VirtualBox

儲存庫 vbox 的更動 34912


忽略:
時間撮記:
2010-12-9 下午05:19:27 (14 年 以前)
作者:
vboxsync
訊息:

crOpenGL: fix d3d8/9 on windows xp guests

位置:
trunk
檔案:
修改 2 筆資料

圖例:

未更動
新增
刪除
  • trunk/doc/manual/user_ChangeLogImpl.xml

    r34909 r34912  
    142142
    143143      <listitem>
     144        <para>3D support: fixed Direct3D 8/9 support on WindowsXP guests</para>
     145      </listitem>
     146
     147      <listitem>
    144148        <para>2D Video acceleration: multimonitor support</para>
    145149      </listitem>
  • trunk/src/VBox/Additions/common/crOpenGL/load.c

    r34887 r34912  
    387387    if (RTThreadGetState(stub.hSyncThread)!=RTTHREADSTATE_TERMINATED)
    388388    {
     389        HANDLE hNative;
     390        DWORD ec=0;
     391
     392        hNative = OpenThread(SYNCHRONIZE|THREAD_QUERY_INFORMATION|THREAD_TERMINATE,
     393                             false, RTThreadGetNative(stub.hSyncThread));
     394        if (!hNative)
     395        {
     396            crWarning("Failed to get handle for sync thread(%#x)", GetLastError());
     397        }
     398        else
     399        {
     400            crDebug("Got handle %p for thread %#x", hNative, RTThreadGetNative(stub.hSyncThread));
     401        }
     402
    389403        ASMAtomicWriteBool(&stub.bShutdownSyncThread, true);
     404
    390405        if (PostThreadMessage(RTThreadGetNative(stub.hSyncThread), WM_QUIT, 0, 0))
    391406        {
    392407            RTThreadWait(stub.hSyncThread, 1000, NULL);
     408
     409            /*Same issue as on linux, RTThreadWait exits before system thread is terminated, which leads
     410             * to issues as our dll goes to be unloaded.
     411             *@todo
     412             *We usually call this function from DllMain which seems to be holding some lock and thus we have to
     413             * kill thread via TerminateThread.
     414             */
     415            if (WaitForSingleObject(hNative, 100)==WAIT_TIMEOUT)
     416            {
     417                crDebug("Wait failed, terminating");
     418                if (!TerminateThread(hNative, 1))
     419                {
     420                    crDebug("TerminateThread failed");
     421                }
     422            }
     423            if (GetExitCodeThread(hNative, &ec))
     424            {
     425                crDebug("Thread %p exited with ec=%i", hNative, ec);
     426            }
     427            else
     428            {
     429                crDebug("GetExitCodeThread failed(%#x)", GetLastError());
     430            }
    393431        }
    394432        else
    395433        {
    396434            crDebug("Sync thread killed before DLL_PROCESS_DETACH");
     435        }
     436
     437        if (hNative)
     438        {
     439            CloseHandle(hNative);
    397440        }
    398441    }
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette