Changeset 69


Ignore:
Timestamp:
Sep 11, 2007, 5:28:57 PM (18 years ago)
Author:
Yuri Dario
Message:

Use cli structure directly, avoid duplicating memory and fixes disconnect.

Location:
trunk/samba/source/ndpsmb
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/samba/source/ndpsmb/smbcd.c

    r68 r69  
    292292
    293293// rc = 0 - continue, rc = 1 - quit with response
    294 int processrequest(HPIPE pipe, cli_state * cli, unsigned long * reconnect, smbwrp_server * srv, smb_request *req, smb_response *res)
     294int processrequest(HPIPE pipe, cli_state ** _cli, unsigned long * reconnect, smbwrp_server * srv, smb_request *req, smb_response *res)
    295295{
    296296        int rc = 0;
    297297        int callrc = 0;
    298298        char * data;
    299         if (!pipe || !cli || !reconnect || !srv || !req || !req->param || req->paramlen > req->length || !res)
     299        cli_state * cli = *_cli;
     300
     301        if (!pipe || !*cli || !reconnect || !srv || !req || !req->param || req->paramlen > req->length || !res)
    300302        {
    301303                debuglocal(0,"invalid structures\n");   
     
    308310        {
    309311                debuglocal(1,"Reconnecting to last server requested\n");
    310                 res->rc = smbwrp_connect(srv, cli);
     312                res->rc = smbwrp_connect(srv, _cli);
    311313                if (res->rc)
    312314                {
     
    341343                                break;
    342344                        }
    343                         res->rc = smbwrp_connect((smbwrp_server *)req->param, cli);
     345                        res->rc = smbwrp_connect((smbwrp_server *)req->param, _cli);
    344346                        if (!res->rc)
    345347                        {
     
    354356                case SMBREQ_DISCONNECT :
    355357                {
    356                         smbwrp_disconnect(cli);
     358                        smbwrp_disconnect(_cli);
    357359                } break;
    358360                case SMBREQ_OPEN :
     
    691693        unsigned long reconnect = 0;
    692694        unsigned long action;
    693         cli_state * cli;
     695        cli_state * cli = 0;
    694696
    695697        if (!arg)
     
    699701        }
    700702        pipe = (HPIPE)arg;
    701         cli = (cli_state *)calloc(smbwrp_getclisize(), 1);
    702         if (!cli)
    703         {
    704                 debuglocal(0,"Not enough memory to initialize client structure\n");
    705                 DosDisConnectNPipe(pipe);
    706                 DosClose(pipe);
    707                 return;
    708         }
     703
    709704        debuglocal(0,"opening client pipe %d\n", pipe);
    710705        for (;;)
     
    718713                // rc = 0 - continue, rc = 1 - quit with response
    719714                memset(&resp, 0, sizeof(resp));
    720                 rc = processrequest(pipe, cli, &reconnect, &srv, &req, &resp);
     715                rc = processrequest(pipe, &cli, &reconnect, &srv, &req, &resp);
    721716                if (rc < 2)
    722717                {
     
    735730                // no delay shown while using FOC.
    736731                DosSleep(0);
    737                 if (req.request == SMBREQ_DISCONNECT)
    738                 {
    739                         /* The cli structure was deallocated. Reallocate it. */
    740                         cli = (cli_state *)calloc(smbwrp_getclisize(), 1);
    741                         if (!cli)
    742                         {
    743                                 debuglocal(0,"Not enough memory to initialize client structure\n");
    744                                 break;
    745                         }
    746                 }
    747732        }
    748733        debuglocal(0,"closing client pipe %d\n", pipe);
  • trunk/samba/source/ndpsmb/smbwrp.c

    r64 r69  
    373373return a connection to a server
    374374*******************************************************/
    375 int _System smbwrp_connect(smbwrp_server * srv, struct cli_state * cli)
     375int _System smbwrp_connect(smbwrp_server * srv, struct cli_state ** cli)
    376376{
    377377        char * server = srv->server_name;
     
    476476
    477477        // copy back cli_state
    478         memcpy( cli, c, sizeof( struct cli_state));
     478        *cli = c;
    479479
    480480//      srv->dev = (dev_t)(str_checksum(server) ^ str_checksum(share));
     
    486486close a connection to a server
    487487*******************************************************/
    488 void _System smbwrp_disconnect(cli_state * cli)
     488void _System smbwrp_disconnect(struct cli_state ** cli)
    489489{
    490490        if (cli)
    491491        {
    492                 cli_shutdown(cli);
     492                // this call will free all buffers, close handles and free cli mem
     493                cli_shutdown(*cli);
     494                // set to zero because no longer valid
     495                *cli = 0;
    493496        }
    494497}
  • trunk/samba/source/ndpsmb/smbwrp.h

    r6 r69  
    121121int _System smbwrp_getclisize(void);
    122122int _System smbwrp_init(void);
    123 int _System smbwrp_connect(smbwrp_server * srv, cli_state * c);
    124 void _System smbwrp_disconnect(cli_state * cli);
     123int _System smbwrp_connect(smbwrp_server * srv, cli_state ** c);
     124void _System smbwrp_disconnect(cli_state ** cli);
    125125int _System smbwrp_open(cli_state * cli, smbwrp_file * file);
    126126int _System smbwrp_read(cli_state * cli, smbwrp_file * file, void *buf, unsigned long count, unsigned long * result);
Note: See TracChangeset for help on using the changeset viewer.