Hello!

I'm replying to my own message again, but this time to inform people
reading this thread how I have solved the problem:

   1) I no longer create a socket server in Vim. I now use the Vim's
      +clientserver feature.

   2) I adapted the C code of vim-remote to be used in the R package
      vimcom.

The vim-remote library is available at
http://www.vim.org/scripts/script.php?script_id=3482

The new files vimremote.c, vimremote.h, vimthings.c and vimthings.h
were added to the src directory of vimcom:
https://github.com/jalvesaq/VimCom/tree/master/src

Thanks to Yukihiro Nakadaira for writing vim-remote!



On Fri, Nov 9, 2012 at 6:25 PM, Jakson Alves de Aquino
<jalve...@gmail.com> wrote:
> I'm adding more details on the problem...
>
> On Thu, Nov 8, 2012 at 6:21 PM, Jakson Alves de Aquino
> <jalve...@gmail.com> wrote:
>> I'm the maintainer of Vim-R-plugin which may start a separate Vim
>> instance to run an "Object Browser". This Vim instance has a UDP
>> server running in a new thread. The server is written in Python and it
>> receives messages from R to update the list of objects. This Vim
>> instance isn't used to edit code and thus there is no problem if Vim
>> code is executed from the server thread.
>>
>> Problem: The server stopped working after patch 691. The problem is
>> the line 748 of src/if_python.c. If I delete this line, the server
>> works as before. The server is created by the function VimServer() of
>> https://github.com/jcfaria/Vim-R-plugin/blob/master/r-plugin/vimcom.py
>
> The line 748 of src/if_python.c is:
>
>     pygilstate = PyGILState_Ensure();
>
> The function VimServer() is called by RunServer() which uses the
> threading module to create a new thread running VimServer(). The
> VimServer() becomes immediately unresponsive. For example, there one
> message that the VimServer() function sends to R when the server is
> successfully started, but this message is actually being sent only
> when the server is joined to the main thread or when the thread is
> killed.
>
> It seems that currently it's not possible to run a thread in parallel
> to the main Vim process.
>
>> I'm far from an expert in Python programming, and I don't know how to
>> solve the problem. Any help is appreciated.
>
> The solutions that I think that may be possible are:
>
>     1) Undo the effect of PyGILState_Ensure() in the vimcom.py code
>        (I don't know if this is possible).
>
>     2) Create a Vim option to call/not call PyGILState_Ensure(). That
>        is, transfer to plugin developers the option to use or not use
>        unsafe threads.
>
> In the Vim-R-plugin, the server is only used when Vim is running
> inside a Tmux session and we have two independent Vim instances. I use
> the server in the editor instance of Vim only to change the value of a
> variable storing the number of the port of the Object Browser server.
> In the Object Browser instance of Vim, the server calls functions to
> rewrite the content of the buffer but that is almost always done when
> the user is editing code in the editor instance and, thus, it's almost
> always idle and almost never crashes. And when it does crash, no data
> is lost since the Object Browser is not used to edit code.
>
> Thanks

-- 
Jakson Alves de Aquino
Federal University of CearĂ¡
Social Sciences Department
www.lepem.ufc.br/aquino.php

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui