Show
Ignore:
Timestamp:
07/24/07 09:49:11 (17 years ago)
Author:
ppalmers
Message:

- switch over to a generic ffado_timestamp_t for the timestamped buffer (currently float)
- implemented some experimental stream phase sync method

- various small things

NOTE: not a very stable commit

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/debugmodule/debugmodule.cpp

    r445 r494  
    328328    char msg[MB_BUFFERSIZE]; 
    329329    va_list ap; 
    330  
     330    unsigned int ntries=5; 
     331    struct timespec wait = {0,50000}; 
     332     
    331333    /* format the message first, to reduce lock contention */ 
    332334    va_start(ap, fmt); 
    333     vsnprintf(msg, MB_BUFFERSIZE, fmt, ap); 
     335    if (vsnprintf(msg, MB_BUFFERSIZE, fmt, ap) >= MB_BUFFERSIZE) { 
     336        print("WARNING: message truncated!\n"); 
     337    } 
    334338    va_end(ap); 
    335339 
     
    341345        return; 
    342346    } 
    343     if (pthread_mutex_trylock(&mb_write_lock) == 0) { 
    344         strncpy(mb_buffers[mb_inbuffer], msg, MB_BUFFERSIZE); 
    345         mb_inbuffer = MB_NEXT(mb_inbuffer); 
    346         pthread_cond_signal(&mb_ready_cond); 
    347         pthread_mutex_unlock(&mb_write_lock); 
    348     } else {            /* lock collision */ 
     347     
     348    while (ntries) { // try a few times 
     349        if (pthread_mutex_trylock(&mb_write_lock) == 0) { 
     350            strncpy(mb_buffers[mb_inbuffer], msg, MB_BUFFERSIZE); 
     351            mb_inbuffer = MB_NEXT(mb_inbuffer); 
     352            pthread_cond_signal(&mb_ready_cond); 
     353            pthread_mutex_unlock(&mb_write_lock); 
     354            break; 
     355        } else { 
     356            nanosleep(&wait, NULL); 
     357            ntries--; 
     358        } 
     359    } 
     360     
     361    if (ntries==0) {  /* lock collision */ 
    349362//         atomic_add(&mb_overruns, 1); 
    350363        // FIXME: atomicity 
     
    358371{ 
    359372    char msg[MB_BUFFERSIZE]; 
     373    unsigned int ntries=5; 
     374    struct timespec wait = {0,50000}; 
    360375 
    361376    /* format the message first, to reduce lock contention */ 
    362     vsnprintf(msg, MB_BUFFERSIZE, fmt, ap); 
    363  
     377    if (vsnprintf(msg, MB_BUFFERSIZE, fmt, ap) >= MB_BUFFERSIZE) { 
     378        print("WARNING: message truncated!\n"); 
     379    } 
     380     
    364381    if (!mb_initialized) { 
    365382        /* Unable to print message with realtime safety. 
     
    370387    } 
    371388 
    372     if (pthread_mutex_trylock(&mb_write_lock) == 0) { 
    373         strncpy(mb_buffers[mb_inbuffer], msg, MB_BUFFERSIZE); 
    374         mb_inbuffer = MB_NEXT(mb_inbuffer); 
    375         pthread_cond_signal(&mb_ready_cond); 
    376         pthread_mutex_unlock(&mb_write_lock); 
    377     } else {            /* lock collision */ 
     389    while (ntries) { // try a few times 
     390        if (pthread_mutex_trylock(&mb_write_lock) == 0) { 
     391            strncpy(mb_buffers[mb_inbuffer], msg, MB_BUFFERSIZE); 
     392            mb_inbuffer = MB_NEXT(mb_inbuffer); 
     393            pthread_cond_signal(&mb_ready_cond); 
     394            pthread_mutex_unlock(&mb_write_lock); 
     395            break; 
     396        } else { 
     397            nanosleep(&wait, NULL); 
     398            ntries--; 
     399        } 
     400    } 
     401     
     402    if (ntries==0) {  /* lock collision */ 
    378403//         atomic_add(&mb_overruns, 1); 
    379404        // FIXME: atomicity 
  • trunk/libffado/src/debugmodule/debugmodule.h

    r445 r494  
    3535 
    3636/* MB_NEXT() relies on the fact that MB_BUFFERS is a power of two */ 
    37 #define MB_BUFFERS    8192 
     37#define MB_BUFFERS    (1<<16) 
    3838#define MB_NEXT(index) ((index+1) & (MB_BUFFERS-1)) 
    3939#define MB_BUFFERSIZE    256        /* message length limit */