--- freem/src/shmmgr.h 2025/01/19 02:04:04 1.1.1.1 +++ freem/src/shmmgr.h 2025/05/08 16:29:18 1.5 @@ -1,23 +1,11 @@ /* - * * - * * * - * * * - * *************** - * * * * * - * * MUMPS * - * * * * * - * *************** - * * * - * * * - * * - * - * shmmgr.h + * $Id: shmmgr.h,v 1.5 2025/05/08 16:29:18 snw Exp $ * shared memory manager data structures * * - * Author: Serena Willis + * Author: Serena Willis * Copyright (C) 1998 MUG Deutschland - * Copyright (C) 2021 Coherent Logic Development LLC + * Copyright (C) 2021, 2025 Coherent Logic Development LLC * * * This file is part of FreeM. @@ -35,6 +23,19 @@ * You should have received a copy of the GNU Affero Public License * along with FreeM. If not, see . * + * $Log: shmmgr.h,v $ + * Revision 1.5 2025/05/08 16:29:18 snw + * Add SOM/SOA/SBM/SBA macros from RSM and modify for FreeM + * + * Revision 1.4 2025/03/26 15:17:12 snw + * Fall back to global-backed SSVNs when memory-backed globals fail in attempt to fix Tru64 + * + * Revision 1.3 2025/03/09 19:50:47 snw + * Second phase of REUSE compliance and header reformat + * + * + * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC + * SPDX-License-Identifier: AGPL-3.0-or-later **/ #if !defined(__shmmgr_h) @@ -71,6 +72,15 @@ #define SHMALIGN(a) (void *) (((unsigned long) a + sysconf (_SC_PAGESIZE)) & ~(sysconf (_SC_PAGESIZE) - 1)) +/* The following macros were borrowed from Reference Standard M + * SOM/SOA: reading and writing data stored in shared memory + * SBM/SBA: for modifying pointers in shared memory + */ +#define SOM(ptr) ((__typeof__(ptr)) ((char *) (ptr) + ((char *) shm_config->dta - (char *) shm_config->hdr->shmad))) +#define SOA(ptr) ((ptr == NULL) ? NULL : SOM(ptr)) +#define SBM(ptr) ((__typeof__(ptr)) ((char *) (ptr) - ((char *) shm_config->dta - (char *) shm_config->hdr->shmad))) +#define SBA(ptr) ((ptr == NULL) ? NULL : SBM(ptr)) + /* data structures */ /* alloc map entry */ @@ -123,6 +133,7 @@ typedef struct shm_hdr_t { char *argptr; long PSIZE; long symlen; + short use_mb_globals; /* pid of process currently in transaction */ /* zero if nobody owns these exclusive rights */