Ejemplo n.º 1
0
/*------------------------------------ releaseObjectMemory ---*/
void
releaseObjectMemory(UdpObjectData * xx)
{
    if (xx)
    {
        if (xx->fErrorQueue)
        {
            qelem_unset(xx->fErrorQueue);
            qelem_free(xx->fErrorQueue);
            xx->fErrorQueue = NULL;
        }
        if (xx->fReceiveQueue)
        {
            qelem_unset(xx->fReceiveQueue);
            qelem_free(xx->fReceiveQueue);
            xx->fReceiveQueue = NULL;
        }
        xx->fReceiveBuffer = xx->fSendBuffer = NULL;
        if (xx->fBufferBase)
        {
            sysmem_lockhandle(reinterpret_cast<t_handle>(xx->fBufferBase), 0);
            sysmem_freehandle(reinterpret_cast<t_handle>(xx->fBufferBase));
            xx->fBufferBase = NULL;
        }
        xx->fReceiveHead = xx->fReceiveTail = xx->fPoolHead = xx->fPoolTail = NULL;
        if (xx->fLinkBase)
        {
            sysmem_lockhandle(reinterpret_cast<t_handle>(xx->fLinkBase), 0);
            sysmem_freehandle(reinterpret_cast<t_handle>(xx->fLinkBase));
            xx->fLinkBase = NULL;
        }
    }
} // releaseObjectMemory
Ejemplo n.º 2
0
void filein_close(t_filein *x)
{
	if (x->f_open) {
		sysfile_close(x->f_fh);
		x->f_fh = 0;
		x->f_open = FALSE;
	}
	if (x->f_data) {
		sysmem_lockhandle((t_handle)x->f_data,0);
		sysmem_freehandle((t_handle)x->f_data);
		x->f_data = 0;
	}
}
Ejemplo n.º 3
0
int lua_importfile(lua_State *L)
{
	const char *filename;
	long outtype;
	short file_volume, err;
	
	if(!lua_isstring(L, 1))
		luaL_error(L, "argument 1 for outlet must be a string");

	filename = lua_tostring(L, 1);
	err = locatefile_extended(filename, &file_volume, &outtype, 0, 0);
	
	if(err) {
		error("jit.gl.lua: can't find file %s", filename);
	}
	else {
		// read file from disk
		long count;
		char **texthandle;
		t_filehandle fh;
		
		err = path_opensysfile(filename, file_volume, &fh, READ_PERM);
		if (err) {
			error("jit.gl.lua: %s: error %d opening file", filename, err);
			return 0;
		}
		
		texthandle = sysmem_newhandle(0);
		sysfile_readtextfile(fh, texthandle, 0, TEXT_LB_NATIVE);
		sysfile_close(fh);
		count = sysmem_handlesize(texthandle);
		sysmem_resizehandle(texthandle, count + 1);
		(*texthandle)[count] = 0; //NULL terminate, '\0'?
		
		//run file in Lua
		err = luaL_loadstring(L, *texthandle);
		err = lua_pcall(L, 0, LUA_MULTRET, 0);
		
		if (err) {
			post("lua pcall error %s", lua_tostring(L, -1));
			lua_pop(L, 1);
		}
		
		sysmem_lockhandle(texthandle, false);
		sysmem_freehandle(texthandle);
	}

	return 0;
}
Ejemplo n.º 4
0
void filein_open(t_filein *x, char *name)
{
	long size;
	
	if (x->f_spool)
		x->f_open = TRUE;
	else {
		sysfile_geteof(x->f_fh,&size);
		if (!(x->f_data = (Byte **)sysmem_newhandle(size)))
			object_error((t_object *)x, "%s too big to read",name);
		else {
			sysmem_lockhandle((t_handle)x->f_data,1);
			sysfile_read(x->f_fh,&size,*x->f_data);
			x->f_size = size;
		}
		sysfile_close(x->f_fh);
	}
	x->f_spool = FALSE;
}
Ejemplo n.º 5
0
void jit_gl_lua_free(t_jit_gl_lua *x)
{
	/* call closebang method on script if it exists*/
	jit_gl_lua_closebang(x);

	/* Remember to destroy the Lua State */
	lua_close(x->lua);
	
	//free handle on script data
	if (x->texthandle) {
		//HUnlock(x->texthandle);
		sysmem_lockhandle(x->texthandle, false);
		//DisposeHandle(x->texthandle);
		sysmem_freehandle(x->texthandle);
	}
	
	if (x->file_watcher) {
		freeobject((t_object *)x->file_watcher);
		x->file_watcher = NULL;
	}
	
	jit_ob3d_free(x);
}
Ejemplo n.º 6
0
/*------------------------------------ initObject ---*/
bool
initObject(UdpObjectData * xx,
           const long      port,
           const long      numBuffers)
{
    bool okSoFar = true;

    if (xx)
    {
        long buffSize = static_cast<long>(BUFF_MEMORY_TO_ALLOC * (numBuffers + 2));

        xx->fSelfPort = static_cast<unsigned short>(port ? port : DEFAULT_PORT);
        memset(&xx->fPartnerAddress, 0, sizeof(xx->fPartnerAddress));
        xx->fPartnerPort = 0;
        xx->fPartnerKnown = false;
        xx->fErrorBangOut = static_cast<t_outlet *>(bangout(xx));
        xx->fResultOut = static_cast<t_outlet *>(outlet_new(xx, NULL));
        setObjectState(xx, kUdpStateUnbound);
        xx->fSocket = NULL;
        xx->fErrorQueue = MAKE_QELEM(xx, processErrorQueue);
        xx->fReceiveQueue = MAKE_QELEM(xx, processReceiveQueue);
        xx->fBufferBase = reinterpret_cast<DataBuffer **>(sysmem_newhandle(buffSize));
        if (xx->fBufferBase)
        {
            sysmem_lockhandle(reinterpret_cast<t_handle>(xx->fBufferBase), 1);
            xx->fSendBuffer = *xx->fBufferBase;
            xx->fReceiveBuffer = reinterpret_cast<DataBuffer *>(ADD_TO_ADDRESS(xx->fSendBuffer,
                                                                           BUFF_MEMORY_TO_ALLOC));
        }
        xx->fLinkBase = MAKE_TYPED_HANDLE(UdpBufferLink, numBuffers);
        if (xx->fLinkBase)
        {
            DataBuffer *    this_buffer =
                                reinterpret_cast<DataBuffer *>(ADD_TO_ADDRESS(xx->fReceiveBuffer,
                                                               BUFF_MEMORY_TO_ALLOC));
            UdpBufferLink * prev_link = NULL;
            UdpBufferLink * this_link = NULL;

            sysmem_lockhandle(reinterpret_cast<t_handle>(xx->fLinkBase), 1);
            xx->fPoolHead = *xx->fLinkBase;
            this_link = xx->fPoolHead;
            for (long link_count = 0; link_count < numBuffers; ++link_count)
            {
                this_link->fPrevious = prev_link;
                this_link->fData = this_buffer;
                this_buffer = reinterpret_cast<DataBuffer *>(ADD_TO_ADDRESS(this_buffer,
                                                                            BUFF_MEMORY_TO_ALLOC));
                this_link->fNext = NULL;
                if (prev_link)
                {
                    prev_link->fNext = this_link;
                }
                prev_link = this_link;
                this_link = reinterpret_cast<UdpBufferLink *>(ADD_TO_ADDRESS(this_link,
                                                                             sizeof(UdpBufferLink)));
            }
            xx->fPoolTail = prev_link;
        }
        xx->fClosing = xx->fRawMode = false;
        if (! (xx->fResultOut && xx->fErrorBangOut && xx->fErrorQueue && xx->fBufferBase &&
               xx->fReceiveQueue && xx->fLinkBase))
        {
            LOG_ERROR_1(xx, OUTPUT_PREFIX "unable to create port or buffer for object")
            okSoFar = false;
        }
    }
    return okSoFar;
} // initObject