[BACK]Return to rf_threadstuff.c CVS log [TXT][DIR] Up to [local] / sys / dev / raidframe

Annotation of sys/dev/raidframe/rf_threadstuff.c, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: rf_threadstuff.c,v 1.4 2002/12/16 07:01:05 tdeval Exp $       */
                      2: /*     $NetBSD: rf_threadstuff.c,v 1.5 1999/12/07 02:13:28 oster Exp $ */
                      3:
                      4: /*
                      5:  * rf_threadstuff.c
                      6:  */
                      7:
                      8: /*
                      9:  * Copyright (c) 1995 Carnegie-Mellon University.
                     10:  * All rights reserved.
                     11:  *
                     12:  * Author: Jim Zelenka
                     13:  *
                     14:  * Permission to use, copy, modify and distribute this software and
                     15:  * its documentation is hereby granted, provided that both the copyright
                     16:  * notice and this permission notice appear in all copies of the
                     17:  * software, derivative works or modified versions, and any portions
                     18:  * thereof, and that both notices appear in supporting documentation.
                     19:  *
                     20:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     21:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
                     22:  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     23:  *
                     24:  * Carnegie Mellon requests users of this software to return to
                     25:  *
                     26:  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
                     27:  *  School of Computer Science
                     28:  *  Carnegie Mellon University
                     29:  *  Pittsburgh PA 15213-3890
                     30:  *
                     31:  * any improvements or extensions that they make and grant Carnegie the
                     32:  * rights to redistribute these changes.
                     33:  */
                     34:
                     35: #include "rf_types.h"
                     36: #include "rf_threadstuff.h"
                     37: #include "rf_general.h"
                     38: #include "rf_shutdown.h"
                     39:
                     40: void mutex_destroyer(void *);
                     41: void cond_destroyer(void *);
                     42:
                     43: /*
                     44:  * Shared stuff.
                     45:  */
                     46:
                     47: void
                     48: mutex_destroyer(void *arg)
                     49: {
                     50:        int rc;
                     51:
                     52:        rc = rf_mutex_destroy(arg);
                     53:        if (rc) {
                     54:                RF_ERRORMSG1("RAIDFRAME: Error %d auto-destroying mutex\n", rc);
                     55:        }
                     56: }
                     57:
                     58: void
                     59: cond_destroyer(void *arg)
                     60: {
                     61:        int rc;
                     62:
                     63:        rc = rf_cond_destroy(arg);
                     64:        if (rc) {
                     65:                RF_ERRORMSG1("RAIDFRAME: Error %d auto-destroying condition\n",
                     66:                    rc);
                     67:        }
                     68: }
                     69:
                     70: int
                     71: _rf_create_managed_mutex(RF_ShutdownList_t **listp, RF_DECLARE_MUTEX(*m),
                     72:     char *file, int line)
                     73: {
                     74:        int rc, rc1;
                     75:
                     76:        rc = rf_mutex_init(m);
                     77:        if (rc)
                     78:                return (rc);
                     79:
                     80:        rc = _rf_ShutdownCreate(listp, mutex_destroyer, (void *) m, file, line);
                     81:        if (rc) {
                     82:                RF_ERRORMSG1("RAIDFRAME: Error %d adding shutdown entry\n", rc);
                     83:                rc1 = rf_mutex_destroy(m);
                     84:                if (rc1) {
                     85:                        RF_ERRORMSG1("RAIDFRAME: Error %d destroying mutex\n",
                     86:                            rc1);
                     87:                }
                     88:        }
                     89:
                     90:        return (rc);
                     91: }
                     92:
                     93: int
                     94: _rf_create_managed_cond(RF_ShutdownList_t **listp, RF_DECLARE_COND(*c),
                     95:     char *file, int line)
                     96: {
                     97:        int rc, rc1;
                     98:
                     99:        rc = rf_cond_init(c);
                    100:        if (rc)
                    101:                return (rc);
                    102:
                    103:        rc = _rf_ShutdownCreate(listp, cond_destroyer, (void *) c, file, line);
                    104:        if (rc) {
                    105:                RF_ERRORMSG1("RAIDFRAME: Error %d adding shutdown entry\n", rc);
                    106:                rc1 = rf_cond_destroy(c);
                    107:                if (rc1) {
                    108:                        RF_ERRORMSG1("RAIDFRAME: Error %d destroying cond\n",
                    109:                            rc1);
                    110:                }
                    111:        }
                    112:        return (rc);
                    113: }
                    114:
                    115: int
                    116: _rf_init_managed_threadgroup(RF_ShutdownList_t **listp, RF_ThreadGroup_t *g,
                    117:     char *file, int line)
                    118: {
                    119:        int rc;
                    120:
                    121:        rc = _rf_create_managed_mutex(listp, &g->mutex, file, line);
                    122:        if (rc)
                    123:                return (rc);
                    124:
                    125:        rc = _rf_create_managed_cond(listp, &g->cond, file, line);
                    126:        if (rc)
                    127:                return (rc);
                    128:
                    129:        g->created = g->running = g->shutdown = 0;
                    130:        return (0);
                    131: }
                    132:
                    133: int
                    134: _rf_destroy_threadgroup(RF_ThreadGroup_t *g, char *file, int line)
                    135: {
                    136:        int rc1, rc2;
                    137:
                    138:        rc1 = rf_mutex_destroy(&g->mutex);
                    139:        rc2 = rf_cond_destroy(&g->cond);
                    140:
                    141:        if (rc1)
                    142:                return (rc1);
                    143:
                    144:        return (rc2);
                    145: }
                    146:
                    147: int
                    148: _rf_init_threadgroup(RF_ThreadGroup_t *g, char *file, int line)
                    149: {
                    150:        int rc;
                    151:
                    152:        rc = rf_mutex_init(&g->mutex);
                    153:        if (rc)
                    154:                return (rc);
                    155:
                    156:        rc = rf_cond_init(&g->cond);
                    157:        if (rc) {
                    158:                rf_mutex_destroy(&g->mutex);
                    159:                return (rc);
                    160:        }
                    161:
                    162:        g->created = g->running = g->shutdown = 0;
                    163:        return (0);
                    164: }
                    165:
                    166:
                    167: /*
                    168:  * Kernel.
                    169:  */
                    170:
                    171: int
                    172: rf_mutex_init(decl_simple_lock_data(, *m))
                    173: {
                    174:        simple_lock_init(m);
                    175:        return (0);
                    176: }
                    177:
                    178: int
                    179: rf_mutex_destroy(decl_simple_lock_data(, *m))
                    180: {
                    181:        return (0);
                    182: }
                    183:
                    184: int
                    185: rf_cond_init(RF_DECLARE_COND(*c))
                    186: {
                    187:        *c = 0;                 /* No reason. */
                    188:        return (0);
                    189: }
                    190:
                    191: int
                    192: rf_cond_destroy(RF_DECLARE_COND(*c))
                    193: {
                    194:        return (0);
                    195: }

CVSweb