Implement __fsetlocking.
The old __isthreaded hack was never very useful on Android because all user code runs in a VM where there are lots of threads running. But __fsetlocking lets a caller say "I'll worry about the locking for this FILE*", which is useful for the normal case where you don't share a FILE* between threads so you don't need any locking. Bug: 17154740 Bug: 18593728 Change-Id: I2a8dddc29d3edff39a3d7d793387f2253608a68d
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#define _FILEEXT_H_
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
@@ -40,9 +41,10 @@ __BEGIN_DECLS
|
||||
* file extension
|
||||
*/
|
||||
struct __sfileext {
|
||||
struct __sbuf _ub; /* ungetc buffer */
|
||||
struct __sbuf _ub; /* ungetc buffer */
|
||||
struct wchar_io_data _wcio; /* wide char io status */
|
||||
pthread_mutex_t _lock; /* file lock */
|
||||
pthread_mutex_t _lock; /* file lock */
|
||||
bool _stdio_handles_locking; /* __fsetlocking support */
|
||||
};
|
||||
|
||||
#define _EXT(fp) ((struct __sfileext *)((fp)->_ext._base))
|
||||
@@ -54,7 +56,8 @@ do { \
|
||||
_UB(fp)._base = NULL; \
|
||||
_UB(fp)._size = 0; \
|
||||
WCIO_INIT(fp); \
|
||||
_FLOCK(fp).value = __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE; \
|
||||
_FLOCK(fp).value = __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE; \
|
||||
_EXT(fp)->_stdio_handles_locking = true; \
|
||||
} while (0)
|
||||
|
||||
#define _FILEEXT_SETUP(f, fext) \
|
||||
|
Reference in New Issue
Block a user