VirtualBox

儲存庫 vbox 的更動 90416


忽略:
時間撮記:
2021-7-29 下午09:10:03 (4 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
146016
訊息:

IPRT: Adding RTThreadQueryTerminationStatus (ring-0). bugref:6695

位置:
trunk
檔案:
新增 1 筆資料
修改 6 筆資料

圖例:

未更動
新增
刪除
  • trunk/include/iprt/err.h

    r85580 r90416  
    380380/** Too many references to an object. */
    381381#define VERR_TOO_MANY_REFERENCES            (-22423)
     382/** Returned by RTThreadQueryTerminationStatus to indicate that the thread is
     383 * (or should be) terminating. */
     384#define VINF_THREAD_IS_TERMINATING          (22424)
    382385/** @} */
    383386
  • trunk/include/iprt/mangling.h

    r90283 r90416  
    25102510# define RTThreadPreemptIsPossible                      RT_MANGLER(RTThreadPreemptIsPossible)  /* r0drv */
    25112511# define RTThreadPreemptRestore                         RT_MANGLER(RTThreadPreemptRestore)     /* r0drv */
     2512# define RTThreadQueryTerminationStatus                 RT_MANGLER(RTThreadQueryTerminationStatus) /* r0drv */
    25122513# define RTThreadSelf                                   RT_MANGLER(RTThreadSelf)
    25132514# define RTThreadSelfAutoAdopt                          RT_MANGLER(RTThreadSelfAutoAdopt)
  • trunk/include/iprt/thread.h

    r90399 r90416  
    452452 */
    453453RTDECL(bool) RTThreadIsSelfAlive(void);
     454
     455#ifdef IN_RING0
     456/**
     457 * Checks whether the specified thread is terminating.
     458 *
     459 * @retval  VINF_SUCCESS if not terminating.
     460 * @retval  VINF_THREAD_IS_TERMINATING if terminating.
     461 * @retval  VERR_INVALID_HANDLE if hThread is not NIL_RTTHREAD.
     462 * @retval  VERR_NOT_SUPPORTED if the OS doesn't provide ways to check.
     463 *
     464 * @param   hThread     The thread to query about, NIL_RTTHREAD is an alias for
     465 *                      the calling thread.  Must be NIL_RTTHREAD for now.
     466 *
     467 * @note    Not suppored on all OSes, so check for VERR_NOT_SUPPORTED.
     468 */
     469RTDECL(int) RTThreadQueryTerminationStatus(RTTHREAD hThread);
     470#endif
    454471
    455472/**
  • trunk/src/VBox/Runtime/Makefile.kmk

    r90283 r90416  
    31823182        generic/RTAssertShouldPanic-generic.cpp \
    31833183        generic/RTLogWriteStdOut-stub-generic.cpp \
     3184        generic/RTMpGetCoreCount-generic.cpp \
     3185        generic/RTThreadQueryTerminationStatus-stub-generic.cpp \
    31843186        generic/RTTimerCreate-generic.cpp \
    31853187        generic/mppresent-generic-online.cpp \
    3186         generic/RTMpGetCoreCount-generic.cpp \
    31873188        generic/rtStrFormatKernelAddress-generic.cpp \
    31883189        nt/RTErrConvertFromNtStatus.cpp \
     
    33253326        generic/RTMpGetCoreCount-generic.cpp \
    33263327        generic/RTMpOnPair-generic.cpp \
     3328        generic/RTThreadQueryTerminationStatus-stub-generic.cpp \
    33273329        generic/RTTimerCreate-generic.cpp \
    33283330        generic/memsafer-generic.cpp \
     
    33923394        generic/RTMpGetSet-generic.cpp \
    33933395        generic/RTMpIsCpuOnline-generic.cpp \
     3396        generic/RTThreadQueryTerminationStatus-stub-generic.cpp \
    33943397        generic/RTTimerCreate-generic.cpp \
    33953398        generic/mppresent-generic.cpp \
     
    35133516        generic/RTAssertShouldPanic-generic.cpp \
    35143517        generic/RTLogWriteDebugger-generic.cpp \
     3518        generic/RTThreadQueryTerminationStatus-stub-generic.cpp \
    35153519        generic/RTTimerCreate-generic.cpp \
    35163520        generic/mppresent-generic.cpp \
     
    35443548        generic/RTLogWriteStdOut-stub-generic.cpp \
    35453549        generic/RTMpGetCoreCount-generic.cpp \
     3550        generic/RTThreadQueryTerminationStatus-stub-generic.cpp \
    35463551        generic/RTTimerCreate-generic.cpp \
    35473552        generic/mppresent-generic.cpp \
     
    35813586        generic/RTAssertShouldPanic-generic.cpp \
    35823587        generic/RTMpOnPair-generic.cpp \
     3588        generic/RTThreadQueryTerminationStatus-stub-generic.cpp \
    35833589        generic/RTTimerCreate-generic.cpp \
    35843590        generic/mppresent-generic.cpp \
  • trunk/src/VBox/Runtime/r0drv/freebsd/thread-r0drv-freebsd.c

    r82968 r90416  
    185185}
    186186
     187
     188RTDECL(int) RTThreadQueryTerminationStatus(RTTHREAD hThread)
     189{
     190    RT_NOREF(hThread);
     191    /** @todo implement. */
     192    return VERR_NOT_SUPPORTED;
     193}
     194
  • trunk/src/VBox/Runtime/r0drv/linux/thread-r0drv-linux.c

    r85698 r90416  
    233233RT_EXPORT_SYMBOL(RTThreadIsInInterrupt);
    234234
     235
     236RTDECL(int) RTThreadQueryTerminationStatus(RTTHREAD hThread)
     237{
     238    struct task_struct *pTask = current;
     239    AssertReturn(hThread == NIL_RTTHREAD, VERR_NOT_SUPPORTED);
     240
     241    /* Check out pending signals.  ASSUMES we can get away w/o locking
     242       anything because we're only reading the data.  */
     243    if (sigismember(&pTask->pending.signal, SIGKILL))
     244        return VINF_THREAD_IS_TERMINATING;
     245
     246#if RTLNX_VER_MIN(2,5,34)
     247    /* Check the pending signals shared with other threads in
     248       the same process/group.  ASSUME since we're alive that
     249       the signal_struct won't be freed while we're looking
     250       at it here... */
     251    {
     252# if RTLNX_VER_MIN(2,5,60)
     253        struct signal_struct *pSignal = current->signal;
     254# else
     255        struct signal_struct *pSignal = current->sig;
     256# endif
     257        if (   pSignal
     258            && sigismember(&pSignal->shared_pending.signal, SIGKILL))
     259            return VINF_THREAD_IS_TERMINATING;
     260    }
     261#endif
     262
     263    return VINF_SUCCESS;
     264}
     265RT_EXPORT_SYMBOL(RTThreadQueryTerminationStatus);
     266
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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