Hi, Fedor
    Thanks for your feedback.
    I don't use any optimizations parameters.

    However now I just change the variable 'session->cmd_line_' as one 
std::string ptr type, then it works on Windows-7.

On Wednesday, January 22, 2014 8:04:45 PM UTC+8, Fedor Indutny wrote:
>
> Hello! 
>
> I'd suspect that it is a compiler bug, seems like it thinks that 
> `c_str()` is no longer required after `uv_buf_init()` call. Could you 
> please try compiling with disabled optimizations to make sure that we 
> are right? 
>
> Cheers, 
> Fedor. 
>
> On Wed, Jan 22, 2014 at 1:15 PM, zhengfish <[email protected]<javascript:>> 
> wrote: 
> > Hi, libuv team, 
> > 
> > In my code, I want to init one buffer with std::string variable's value. 
> > However I found I cannot call uv_buf_init with std::string directly on 
> > Windows-7, if I do that, my program will quit libuv loop without any 
> > warning. 
> > As a comparison, I can do that on Linux. 
> > My libuv version is v0.10.21. 
> > 
> > 
> > 
> > Here is my code-snippet: 
> > 
> > 
> ------------------------------------------------------------code-snippet---------------------------------------------------------
>  
>
> > 
> > // callback for connect 
> > void on_connect ( uv_connect_t * req, int status ) 
> > { 
> >     FUNCTION_CALL 
> > 
> >     if ( status ) 
> >     { 
> >         fprintf ( stdout, "remote connection failed, need to enable 
> remote 
> > service\n" ); 
> > 
> >         if ( uv_last_error ( req->handle->loop ).code != UV_ECANCELED ) 
> >         { 
> >             SHOW_UV_ERROR ( req->handle->loop ); 
> >             free ( req->data ); 
> >             free ( req ); 
> >         } 
> >         return; 
> >     } 
> > 
> >     session_t * session = ( session_t * ) req->data; 
> >     //fprintf ( stdout, "cmd_line[%d]:\n%s\n", 
> session->cmd_line_.length( ), 
> > ( char * ) session->cmd_line_.c_str( ) ); 
> > 
> >     /** 
> >      * uv_buf_t buf[1]; 
> >      * buf[0].len = len; 
> >      * buf[0].base = message; 
> >      */ 
> > 
> >     /* buf init */ 
> > #if 0 
> >     // Here it works on both Windows-7 and Linux 
> >     char buf_tmp[4096] = { 0 }; 
> >     uv_buf_t buf = uv_buf_init ( buf_tmp, session->cmd_line_.length( ) 
> ); 
> >     buf.base = ( char * ) session->cmd_line_.c_str( ); 
> > #else 
> >     // TODO 
> >     // It works on Linux, but dosen't work on Windows-7 
> >     // On Windows-7, here it will lead program quit without any warning 
> or 
> > error. 
> >     // It even will not call on_write_end() function after uv_write() 
> called 
> > normally. 
> >     uv_buf_t buf = uv_buf_init ( ( char * ) session->cmd_line_.c_str( ), 
> > session->cmd_line_.length( ) ); 
> > #endif 
> > 
> >     uv_stream_t * tcp = req->handle; 
> > 
> >     uv_write_t write_req; 
> > 
> >     int buf_count = 1; 
> > 
> >     int rc = uv_write ( & write_req, tcp, & buf, buf_count, on_write_end 
> ); 
> >     if ( rc ) 
> >     { 
> >         SHOW_UV_ERROR ( req->handle->loop ); 
> >         fprintf ( stderr, "uv_write() called failed\n" ); 
> >     } 
> >     else 
> >     { 
> >         fprintf ( stderr, "uv_write() called normally.\n" ); 
> >     } 
> > } 
> > 
> > 
> > -- 
> > 
> >      _                         __ _     _ 
> >  ___| |__   ___ _ __   __ _   / _(_)___| |__ 
> > |_  / '_ \ / _ \ '_ \ / _` | | |_| / __| '_ \ 
> >  / /| | | |  __/ | | | (_| | |  _| \__ \ | | | 
> > /___|_| |_|\___|_| |_|\__, | |_| |_|___/_| |_| 
> >                       |___/ 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "libuv" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to [email protected] <javascript:>. 
> > To post to this group, send email to [email protected]<javascript:>. 
>
> > Visit this group at http://groups.google.com/group/libuv. 
> > For more options, visit https://groups.google.com/groups/opt_out. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to