#include "spebase.h"
Go to the source code of this file.
Functions | |
int | _base_spe_open_if_closed (struct spe_context *spe, enum fd_name fdesc, int locked) |
void | _base_spe_close_if_open (struct spe_context *spe, enum fd_name fdesc) |
void _base_spe_close_if_open | ( | struct spe_context * | spe, | |
enum fd_name | fdesc | |||
) |
Definition at line 125 of file create.c.
References _base_spe_context_lock(), _base_spe_context_unlock(), spe_context::base_private, spe_context_base_priv::spe_fds_array, and spe_context_base_priv::spe_fds_refcount.
Referenced by __base_spe_event_source_release(), and _base_spe_signal_write().
00126 { 00127 _base_spe_context_lock(spe, fdesc); 00128 00129 if (spe->base_private->spe_fds_array[(int)fdesc] != -1 && 00130 spe->base_private->spe_fds_refcount[(int)fdesc] == 1) { 00131 00132 spe->base_private->spe_fds_refcount[(int)fdesc]--; 00133 close(spe->base_private->spe_fds_array[(int)fdesc]); 00134 00135 spe->base_private->spe_fds_array[(int)fdesc] = -1; 00136 } else if (spe->base_private->spe_fds_refcount[(int)fdesc] > 0) { 00137 spe->base_private->spe_fds_refcount[(int)fdesc]--; 00138 } 00139 00140 _base_spe_context_unlock(spe, fdesc); 00141 }
int _base_spe_open_if_closed | ( | struct spe_context * | spe, | |
enum fd_name | fdesc, | |||
int | locked | |||
) |
Definition at line 101 of file create.c.
References _base_spe_context_lock(), _base_spe_context_unlock(), spe_context::base_private, spe_context_base_priv::fd_spe_dir, fd_attr::mode, fd_attr::name, spe_context_base_priv::spe_fds_array, and spe_context_base_priv::spe_fds_refcount.
Referenced by __base_spe_event_source_acquire(), _base_spe_in_mbox_status(), _base_spe_in_mbox_write(), _base_spe_mssync_start(), _base_spe_mssync_status(), _base_spe_out_intr_mbox_read(), _base_spe_out_intr_mbox_status(), _base_spe_out_mbox_read(), _base_spe_out_mbox_status(), and _base_spe_signal_write().
00102 { 00103 if (!locked) 00104 _base_spe_context_lock(spe, fdesc); 00105 00106 /* already open? */ 00107 if (spe->base_private->spe_fds_array[fdesc] != -1) { 00108 spe->base_private->spe_fds_refcount[fdesc]++; 00109 } else { 00110 spe->base_private->spe_fds_array[fdesc] = 00111 openat(spe->base_private->fd_spe_dir, 00112 spe_fd_attr[fdesc].name, 00113 spe_fd_attr[fdesc].mode); 00114 00115 if (spe->base_private->spe_fds_array[(int)fdesc] > 0) 00116 spe->base_private->spe_fds_refcount[(int)fdesc]++; 00117 } 00118 00119 if (!locked) 00120 _base_spe_context_unlock(spe, fdesc); 00121 00122 return spe->base_private->spe_fds_array[(int)fdesc]; 00123 }