Changeset 183788f1 in mainline for uspace/libc/generic/io/vprintf.c


Ignore:
Timestamp:
2007-04-09T16:17:25Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
36f19c0
Parents:
de33dab
Message:

Remove printf() serialization from thread1 test in tester.
The agreement among developers seems to be that:

  • there _must_ be a futex to serialize access to printf()
  • there _must_ be pseudo thread serialization in printf()
  • the best place for this is vprintf(), the one that goes to console
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/libc/generic/io/vprintf.c

    rde33dab r183788f1  
    3737#include <unistd.h>
    3838#include <io/printf_core.h>
     39#include <futex.h>
     40#include <async.h>
     41
     42static atomic_t printf_futex = FUTEX_INITIALIZER;
    3943
    4044static int vprintf_write(const char *str, size_t count, void *unused)
     
    5054int vprintf(const char *fmt, va_list ap)
    5155{
    52         struct printf_spec ps = {(int(*)(void *, size_t, void *)) vprintf_write, NULL};
    53        
     56        struct printf_spec ps = {
     57                (int (*)(void *, size_t, void *)) vprintf_write,
     58                 NULL
     59        };
     60        /*
     61         * Prevent other threads to execute printf_core()
     62         */
     63        futex_down(&printf_futex);
     64        /*
     65         * Prevent other pseudo threads of the same thread
     66         * to execute printf_core()
     67         */
     68        async_serialize_start();
    5469        int ret = printf_core(fmt, &ps, ap);
    55        
     70        async_serialize_end();
     71        futex_up(&printf_futex);
    5672        return ret;
    5773}
Note: See TracChangeset for help on using the changeset viewer.