From 968e1d8710004517639966bd4c6f83f37edccd21 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Wed, 8 Apr 2009 22:26:16 +0000 Subject: Add read-write mutexes to canvas pixels. New error infrastructure. --- libdimension/error.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 libdimension/error.c (limited to 'libdimension/error.c') diff --git a/libdimension/error.c b/libdimension/error.c new file mode 100644 index 0000000..b91c192 --- /dev/null +++ b/libdimension/error.c @@ -0,0 +1,74 @@ +/************************************************************************* + * Copyright (C) 2008 Tavian Barnes * + * * + * This file is part of Dimension. * + * * + * Dimension is free software; you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as published * + * by the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * Dimension is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this program. If not, see * + * . * + *************************************************************************/ + +#include "dimension.h" +#include +#include /* For fprintf() */ +#include /* For exit() */ + +static dmnsn_severity dmnsn_resilience = DMNSN_SEVERITY_MEDIUM; +static pthread_mutex_t dmnsn_resilience_mutex = PTHREAD_MUTEX_INITIALIZER; + +void +dmnsn_report_error(dmnsn_severity severity, const char *func, const char *str) +{ + if (severity >= dmnsn_get_resilience()) { + fprintf(stderr, "Dimension ERROR: %s(): %s\n", func, str); + exit(1); + } else { + fprintf(stderr, "Dimension WARNING: %s(): %s\n", func, str); + } +} + +dmnsn_severity +dmnsn_get_resilience() +{ + dmnsn_severity resilience; + if (pthread_mutex_lock(&dmnsn_resilience_mutex) != 0) { + fprintf(stderr, "Dimension WARNING: %s(): %s\n", __func__, + "Couldn't lock resilience mutex."); + } + resilience = dmnsn_resilience; + if (pthread_mutex_unlock(&dmnsn_resilience_mutex) != 0) { + fprintf(stderr, "Dimension WARNING: %s(): %s\n", __func__, + "Couldn't unlock resilience mutex."); + } + return resilience; +} + +void +dmnsn_set_resilience(dmnsn_severity resilience) +{ + if (resilience > DMNSN_SEVERITY_HIGH) { + fprintf(stderr, "Dimension ERROR: %s(): %s\n", __func__, + "Resilience has wrong value."); + exit(1); + } + + if (pthread_mutex_lock(&dmnsn_resilience_mutex) != 0) { + fprintf(stderr, "Dimension WARNING: %s(): %s\n", __func__, + "Couldn't lock resilience mutex."); + } + dmnsn_resilience = resilience; + if (pthread_mutex_unlock(&dmnsn_resilience_mutex) != 0) { + fprintf(stderr, "Dimension WARNING: %s(): %s\n", __func__, + "Couldn't unlock resilience mutex."); + } +} -- cgit v1.2.3