LCOV - code coverage report
Current view: top level - ext - shared_memory.c (source / functions) Coverage Total Hit
Test: Extension code coverage Lines: 70.4 % 27 19
Test Date: 2026-05-15 07:07:45 Functions: 100.0 % 4 4

            Line data    Source code
       1              : /*
       2              :   +----------------------------------------------------------------------+
       3              :   | COLOPL PHP TimeShifter.                                              |
       4              :   +----------------------------------------------------------------------+
       5              :   | Copyright (c) COLOPL, Inc.                                           |
       6              :   +----------------------------------------------------------------------+
       7              :   | This source file is subject to the BSD-3-Clause license that is      |
       8              :   | bundled with this package in the file LICENSE.                       |
       9              :   +----------------------------------------------------------------------+
      10              :   | Author: Go Kudo <g-kudo@colopl.co.jp>                                |
      11              :   +----------------------------------------------------------------------+
      12              : */
      13              : 
      14              : #include "php.h"
      15              : #include "shared_memory.h"
      16              : 
      17          164 : bool sm_init(sm_t *sm, size_t size) {
      18          164 :     sm->size = size;
      19              : 
      20          164 :     if ((sm->data = mmap(NULL, sm->size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0)) == MAP_FAILED) {
      21            0 :         return false;
      22              :     }
      23              : 
      24          164 :     if (sem_init(&sm->semaphore, 1, 1) != 0) {
      25            0 :         return false;
      26              :     }
      27              : 
      28          164 :     return sm;
      29              : }
      30              : 
      31         1772 : void sm_read(sm_t *sm, void *dest) {
      32         1772 :     memcpy(dest, sm->data, sm->size);
      33         1772 : }
      34              : 
      35          388 : bool sm_write(sm_t *sm, void *src) {
      36          388 :     if (!sm->data) {
      37            0 :         return false;
      38              :     }
      39              : 
      40          388 :     if (sem_wait(&sm->semaphore) != 0) {
      41            0 :         return false;
      42              :     }
      43              : 
      44          388 :     memcpy(sm->data, src, sm->size);
      45              : 
      46          388 :     if (sem_post(&sm->semaphore) != 0) {
      47            0 :         return false;
      48              :     }
      49              : 
      50          388 :     return true;
      51              : }
      52              : 
      53          164 : bool sm_free(sm_t *sm) {
      54          164 :     if (!sm->data) {
      55            0 :         return false;
      56              :     }
      57              : 
      58          164 :     if (munmap(sm->data, sm->size) != 0) {
      59            0 :         return false;
      60              :     }
      61              : 
      62          164 :     if (sem_destroy(&sm->semaphore) != 0) {
      63            0 :         return false;
      64              :     }
      65              : 
      66          164 :     return true;
      67              : }
        

Generated by: LCOV version 2.0-1