OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems/] [c/] [src/] [librpc/] [src/] [rpc/] [rtems_rpc.c] - Rev 1765

Compare with Previous | Blame | View Log

/*
 * RTEMS multi-tasking support
 */
 
#include <rpc/rpc.h>
#include <rtems.h>
#include <stdlib.h>
 
/*
 * RPC variables for single-thread
 */
static struct rtems_rpc_task_variables rpc_default = {
	-1,		/* svc_maxfd */
};
 
/*
 * RPC values for initializing a new per-task set of variables
 */
static const struct rtems_rpc_task_variables rpc_init = {
	-1,		/* svc_maxfd */
};
 
/*
 * Per-task pointer to RPC data
 */
void *rtems_rpc_task_variables = &rpc_default;
 
/*
 * Set up per-task RPC variables
 */
int rtems_rpc_task_init (void)
{
	rtems_status_code sc;
	struct rtems_rpc_task_variables *tvp;
 
	if (rtems_rpc_task_variables == &rpc_default) {
		tvp = malloc (sizeof *tvp);
		if (tvp == NULL)
			return RTEMS_NO_MEMORY;
		/*
		 * FIXME: Should have destructor which cleans up
		 * all RPC stuff:
		 *	- Close all files
		 *	- Go through and free linked list elements
		 *	- Free other allocated memory (e.g. clnt_perror_buf)
		 */
		sc = rtems_task_variable_add (RTEMS_SELF, &rtems_rpc_task_variables, NULL);
		if (sc != RTEMS_SUCCESSFUL) {
			free (tvp);
			return sc;
		}
		*tvp = rpc_init;
		rtems_rpc_task_variables = tvp;
	}
	return RTEMS_SUCCESSFUL;
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.