Example #1
0
void
__kmp_i18n_catopen(
) {
    if ( status == KMP_I18N_CLOSED ) {
        __kmp_acquire_bootstrap_lock( & lock );
        if ( status == KMP_I18N_CLOSED ) {
            __kmp_i18n_do_catopen();
        }; // if
        __kmp_release_bootstrap_lock( & lock );
    }; // if
} // func __kmp_i18n_catopen
Example #2
0
int
__kmp_debug_assert(
    char const *  msg,
    char const *  file,
    int           line
) {

    if ( file == NULL ) {
        file = KMP_I18N_STR( UnknownFile );
    } else {
        // Remove directories from path, leave only file name. File name is enough, there is no need
        // in bothering developers and customers with full paths.
        char const * slash = strrchr( file, '/' );
        if ( slash != NULL ) {
            file = slash + 1;
        }; // if
    }; // if

#ifdef KMP_DEBUG
    __kmp_acquire_bootstrap_lock( & __kmp_stdio_lock );
    __kmp_debug_printf( "Assertion failure at %s(%d): %s.\n", file, line, msg );
    __kmp_release_bootstrap_lock( & __kmp_stdio_lock );
#ifdef USE_ASSERT_BREAK
#if KMP_OS_WINDOWS
    DebugBreak();
#endif
#endif // USE_ASSERT_BREAK
#ifdef USE_ASSERT_STALL
    /*    __kmp_infinite_loop(); */
    for(;;);
#endif // USE_ASSERT_STALL
#ifdef USE_ASSERT_SEG
    {
        int volatile * ZERO = (int*) 0;
        ++ (*ZERO);
    }
#endif // USE_ASSERT_SEG
#endif

    __kmp_msg(
        kmp_ms_fatal,
        KMP_MSG( AssertionFailure, file, line ),
        KMP_HNT( SubmitBugReport ),
        __kmp_msg_null
    );

    return 0;

} // __kmp_debug_assert
Example #3
0
/* Dump debugging buffer to stderr */
void
__kmp_dump_debug_buffer( void )
{
    if ( __kmp_debug_buffer != NULL ) {
        int i;
        int dc = __kmp_debug_count;
        char *db = & __kmp_debug_buffer[ (dc % __kmp_debug_buf_lines) * __kmp_debug_buf_chars ];
        char *db_end = & __kmp_debug_buffer[ __kmp_debug_buf_lines * __kmp_debug_buf_chars ];
        char *db2;

        __kmp_acquire_bootstrap_lock( & __kmp_stdio_lock );
        __kmp_printf_no_lock( "\nStart dump of debugging buffer (entry=%d):\n",
                              dc % __kmp_debug_buf_lines );

        for ( i = 0; i < __kmp_debug_buf_lines; i++ ) {

            if ( *db != '\0' ) {
                /* Fix up where no carriage return before string termination char */
                for ( db2 = db + 1; db2 < db + __kmp_debug_buf_chars - 1; db2 ++) {
                    if ( *db2 == '\0' ) {
                        if ( *(db2-1) != '\n' ) {
                            *db2 = '\n';
                            *(db2+1) = '\0';
                        }
                        break;
                    }
                }
                /* Handle case at end by shortening the printed message by one char if necessary */
                if ( db2 == db + __kmp_debug_buf_chars - 1 &&
                        *db2 == '\0' && *(db2-1) != '\n' ) {
                    *(db2-1) = '\n';
                }

                __kmp_printf_no_lock( "%4d: %.*s", i, __kmp_debug_buf_chars, db );
                *db = '\0'; /* only let it print once! */
            }

            db += __kmp_debug_buf_chars;
            if ( db >= db_end )
                db = __kmp_debug_buffer;
        }

        __kmp_printf_no_lock( "End dump of debugging buffer (entry=%d).\n\n",
                              ( dc+i-1 ) % __kmp_debug_buf_lines );
        __kmp_release_bootstrap_lock( & __kmp_stdio_lock );
    }
}
Example #4
0
/*!
 @ingroup THREADPRIVATE
 @param loc source location information
 @param global_tid  global thread number
 @param data  pointer to data to privatize
 @param size  size of data to privatize
 @param cache  pointer to cache
 @return pointer to private storage

 Allocate private storage for threadprivate data.
*/
void *
__kmpc_threadprivate_cached(
    ident_t *  loc,
    kmp_int32  global_tid,   // gtid.
    void *     data,         // Pointer to original global variable.
    size_t     size,         // Size of original global variable.
    void ***   cache
) {
    KC_TRACE( 10, ("__kmpc_threadprivate_cached: T#%d called with cache: %p, address: %p, size: %"
                   KMP_SIZE_T_SPEC "\n",
                   global_tid, *cache, data, size ) );

    if ( TCR_PTR(*cache) == 0) {
        __kmp_acquire_lock( & __kmp_global_lock, global_tid );

        if ( TCR_PTR(*cache) == 0) {
            __kmp_acquire_bootstrap_lock(&__kmp_tp_cached_lock);
            __kmp_tp_cached = 1;
            __kmp_release_bootstrap_lock(&__kmp_tp_cached_lock);
            void ** my_cache;
            KMP_ITT_IGNORE(
            my_cache = (void**)
                __kmp_allocate(sizeof( void * ) * __kmp_tp_capacity + sizeof ( kmp_cached_addr_t ));
                           );