create.h File Reference

#include "spebase.h"
Include dependency graph for create.h:
This graph shows which files directly or indirectly include this file:

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)

Function Documentation

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:


Generated by  doxygen 1.6.2