VirtualBox

Changeset 90488 in vbox


Ignore:
Timestamp:
Aug 3, 2021 9:17:59 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
146092
Message:

IPRT: Added RTSemEventIsSignalSafe and RTSemEventMultiIsSignalSafe - ring-0 only. bugref:6695

Location:
trunk
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/mangling.h

    r90416 r90488  
    19461946# define RTSemEventDestroy                              RT_MANGLER(RTSemEventDestroy)
    19471947# define RTSemEventGetResolution                        RT_MANGLER(RTSemEventGetResolution)    /* r0drv */
     1948# define RTSemEventIsSignalSafe                         RT_MANGLER(RTSemEventIsSignalSafe)     /* r0drv */
    19481949# define RTSemEventMultiAddSignaller                    RT_MANGLER(RTSemEventMultiAddSignaller)
    19491950# define RTSemEventMultiCreate                          RT_MANGLER(RTSemEventMultiCreate)
     
    19511952# define RTSemEventMultiDestroy                         RT_MANGLER(RTSemEventMultiDestroy)
    19521953# define RTSemEventMultiGetResolution                   RT_MANGLER(RTSemEventMultiGetResolution) /* r0drv */
     1954# define RTSemEventMultiIsSignalSafe                    RT_MANGLER(RTSemEventMultiIsSignalSafe) /* r0drv */
    19531955# define RTSemEventMultiRemoveSignaller                 RT_MANGLER(RTSemEventMultiRemoveSignaller)
    19541956# define RTSemEventMultiReset                           RT_MANGLER(RTSemEventMultiReset)
  • trunk/include/iprt/semaphore.h

    r82968 r90488  
    175175
    176176/**
     177 * Whether RTSemEventSignal can be safely called w/o risk of preemption.
     178 *
     179 * Checks whether the caller can safely signal a single release semaphore
     180 * without any risk of getting preempted on locks or similar while doing so.
     181 * This also checks whether the context is suitable in general.
     182 *
     183 * @returns true if safe, false if not.
     184 * @remarks Only ring-0.
     185 */
     186RTR0DECL(bool) RTSemEventIsSignalSafe(void);
     187
     188/**
    177189 * Wait for the event semaphore to be signaled, resume on interruption.
    178190 *
     
    338350 */
    339351RTDECL(int)  RTSemEventMultiSignal(RTSEMEVENTMULTI hEventMultiSem);
     352
     353/**
     354 * Whether RTSemEventMultiSignal can be safely called w/o risk of preemption.
     355 *
     356 * Checks whether the caller can safely signal a multiple release semaphore
     357 * without any risk of getting preempted on locks or similar while doing so.
     358 * This also checks whether the context is suitable in general.
     359 *
     360 * @returns true if safe, false if not.
     361 * @remarks Only ring-0.
     362 */
     363RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void);
    340364
    341365/**
  • trunk/src/VBox/Runtime/r0drv/darwin/semevent-r0drv-darwin.cpp

    r82968 r90488  
    426426}
    427427
     428
     429RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     430{
     431    /** @todo check the code...   */
     432    return false;
     433}
     434RT_EXPORT_SYMBOL(RTSemEventIsSignalSafe);
     435
  • trunk/src/VBox/Runtime/r0drv/darwin/semeventmulti-r0drv-darwin.cpp

    r83098 r90488  
    449449}
    450450
     451
     452RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     453{
     454    /** @todo check the code...   */
     455    return false;
     456}
     457
  • trunk/src/VBox/Runtime/r0drv/freebsd/semevent-r0drv-freebsd.c

    r82968 r90488  
    279279}
    280280
     281
     282RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     283{
     284    /** @todo check the code...   */
     285    return false;
     286}
     287
  • trunk/src/VBox/Runtime/r0drv/freebsd/semeventmulti-r0drv-freebsd.c

    r82968 r90488  
    343343RT_EXPORT_SYMBOL(RTSemEventMultiGetResolution);
    344344
     345
     346RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     347{
     348    /** @todo check the code...   */
     349    return false;
     350}
     351RT_EXPORT_SYMBOL(RTSemEventMultiIsSignalSafe);
     352
  • trunk/src/VBox/Runtime/r0drv/haiku/semevent-r0drv-haiku.c

    r82968 r90488  
    263263}
    264264
     265
     266RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     267{
     268    /** @todo check the code...   */
     269    return false;
     270}
     271RT_EXPORT_SYMBOL(RTSemEventIsSignalSafe);
     272
  • trunk/src/VBox/Runtime/r0drv/haiku/semeventmulti-r0drv-haiku.c

    r82968 r90488  
    291291RT_EXPORT_SYMBOL(RTSemEventMultiGetResolution);
    292292
     293
     294RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     295{
     296    /** @todo check the code...   */
     297    return false;
     298}
     299RT_EXPORT_SYMBOL(RTSemEventMultiIsSignalSafe);
     300
  • trunk/src/VBox/Runtime/r0drv/linux/semevent-r0drv-linux.c

    r82968 r90488  
    278278RT_EXPORT_SYMBOL(RTSemEventGetResolution);
    279279
     280
     281RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     282{
     283    return true;
     284}
     285RT_EXPORT_SYMBOL(RTSemEventIsSignalSafe);
     286
  • trunk/src/VBox/Runtime/r0drv/linux/semeventmulti-r0drv-linux.c

    r82968 r90488  
    343343RT_EXPORT_SYMBOL(RTSemEventMultiGetResolution);
    344344
     345
     346RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     347{
     348    return true;
     349}
     350RT_EXPORT_SYMBOL(RTSemEventMultiIsSignalSafe);
     351
  • trunk/src/VBox/Runtime/r0drv/netbsd/semevent-r0drv-netbsd.c

    r82968 r90488  
    276276    return 1000000000 / hz;
    277277}
     278
     279RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     280{
     281    /** @todo check the code...   */
     282    return false;
     283}
     284
  • trunk/src/VBox/Runtime/r0drv/netbsd/semeventmulti-r0drv-netbsd.c

    r82968 r90488  
    340340}
    341341RT_EXPORT_SYMBOL(RTSemEventMultiGetResolution);
     342
     343
     344RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     345{
     346    /** @todo check the code...   */
     347    return false;
     348}
     349RT_EXPORT_SYMBOL(RTSemEventMultiIsSignalSafe);
     350
  • trunk/src/VBox/Runtime/r0drv/nt/semevent-r0drv-nt.cpp

    r90459 r90488  
    276276}
    277277
     278
     279RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     280{
     281    return KeGetCurrentIrql() <= DISPATCH_LEVEL;
     282}
     283
  • trunk/src/VBox/Runtime/r0drv/nt/semeventmulti-r0drv-nt.cpp

    r82968 r90488  
    299299}
    300300
     301
     302RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     303{
     304    return KeGetCurrentIrql() <= DISPATCH_LEVEL;
     305}
     306
  • trunk/src/VBox/Runtime/r0drv/os2/semevent-r0drv-os2.cpp

    r82968 r90488  
    294294}
    295295
     296
     297RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     298{
     299    return true;
     300}
     301
  • trunk/src/VBox/Runtime/r0drv/os2/semeventmulti-r0drv-os2.cpp

    r82968 r90488  
    304304}
    305305
     306
     307RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     308{
     309    return true;
     310}
     311
  • trunk/src/VBox/Runtime/r0drv/solaris/semevent-r0drv-solaris.c

    r82968 r90488  
    346346}
    347347
     348
     349RTR0DECL(bool) RTSemEventIsSignalSafe(void)
     350{
     351    /* I don't trust Solaris not to preempt us. */
     352    return false;
     353}
     354
  • trunk/src/VBox/Runtime/r0drv/solaris/semeventmulti-r0drv-solaris.c

    r82968 r90488  
    354354}
    355355
     356
     357RTR0DECL(bool) RTSemEventMultiIsSignalSafe(void)
     358{
     359    /* Don't trust solaris not to preempt us. */
     360    return false;
     361}
     362
Note: See TracChangeset for help on using the changeset viewer.

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