From: Vladimir T. <vtz...@gm...> - 2009-07-24 20:22:16
|
On 7/21/09, Sam Steingold <sd...@gn...> wrote: > Vladimir Tzankov wrote: >> 2. handle each case separately (now vector of vectors). > > yes, this is the application (rawsock) developer's chore, not the core > (lispbibl) developer's one. I've added pin_varobject_with_pc(pc,varobject) macro that pins object using already allocated pinned_chain_t struct (pc). It should be C stack allocated - auto or via alloca(). In case of rawsock iovec - I think an array of pinned_chain_t struct should be alloca()-ed by the caller of fill_iovec() and fill_iovec() should use pin_varobject_with_pc() for each vector. After the system call returns (readv/writev) - the new macro unpin_varobjects(count) can be used to unpin all vectors at once. In case of non-local exit from the system call (for example CTRL-C while in it ...) objects will be unpinned in enter_frame_at_STACK() (like it was before). Also - STACK is not modified anymore when object is pinned/unpinned. Vladimir |