/*------------------------------------ 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
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; } }
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; }
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; }
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); }
/*------------------------------------ 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