File:  [parser3project] / parser3 / src / include / pa_os.h
Revision 1.17: download - view: text, annotated - select for diffs - revision graph
Fri Oct 23 20:48:48 2026 UTC (38 hours, 20 minutes ago) by moko
Branches: MAIN
CVS tags: HEAD
thread safety for @conf: THREAD_LOCAL specified where should be, CONF_OPTION used for bool values, SYMBOLS_CACHING used only for native methods names to aboid Symbols modifications in threads.

/** @file
	Parser: commonly used functions.

	Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)
	Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
*/

#ifndef PA_OS_H
#define PA_OS_H

#define IDENT_PA_OS_H "$Id: pa_os.h,v 1.17 2026/10/23 20:48:48 moko Exp $"

#define PA_LOCK_ATTEMPTS 20
#define PA_LOCK_WAIT_TIMEOUT_SECS 0
#define PA_LOCK_WAIT_TIMEOUT_USECS 500000

extern unsigned int pa_lock_attempts; // not thread local: never changes

// 'blocking' mean we will wait till other process release lock 
// but we'll make PA_LOCK_ATTEMPTS attempts with PA_LOCK_WAIT_TIMEOUT secs delaus between attempts 
// 'nonblocking' mean we will make only 1 attempt without waiting

int pa_lock_shared_blocking(int fd);
int pa_lock_exclusive_blocking(int fd);
int pa_lock_exclusive_nonblocking(int fd);
int pa_unlock(int fd);

/// yields to OS for secs secs and usecs microseconds (1E-6)
int pa_sleep(unsigned long secs, unsigned long usecs);

#ifdef _MSC_VER
/// sets errno from GetLastError(), as CRT does, if the passed windows api call result is zero; returns it
int pa_set_errno(int status);
#endif

#endif

E-mail: