From f76533fa77b5013433976d12be12dd1ff71cf20a Mon Sep 17 00:00:00 2001 From: Pierre Veyre Date: Thu, 20 Mar 2014 17:03:03 +0100 Subject: [PATCH] Fix bug and leak for msg_file_open Repare tesh tests --- examples/msg/io/storage.tesh | 27 +++-- src/surf/storage_n11.cpp | 2 +- src/surf/workstation_interface.cpp | 20 ++-- teshsuite/msg/storage/storage_basic.tesh | 121 ++++++++++++----------- 4 files changed, 86 insertions(+), 84 deletions(-) diff --git a/examples/msg/io/storage.tesh b/examples/msg/io/storage.tesh index 5d5b935555..e0e74b2754 100644 --- a/examples/msg/io/storage.tesh +++ b/examples/msg/io/storage.tesh @@ -1,6 +1,6 @@ #! ./tesh -$ ${bindir:=.}/io/storage ${srcdir:=.}/examples/platforms/storage.xml "--log=root.fmt:> [%8.6r]%e(%i@%h)%e%m%n" +$ ${bindir:=.}/io/storage ${srcdir:=.}/examples/platforms/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" > [ 0.000000] (1:(null)@denise) *** Storage info on denise *** > [ 0.000000] (1:(null)@denise) Storage name: Disk2, mount name: c: > [ 0.000000] (1:(null)@denise) Total size: 536870912000 bytes @@ -12,23 +12,23 @@ $ ${bindir:=.}/io/storage ${srcdir:=.}/examples/platforms/storage.xml "--log=roo > [ 0.000000] (1:(null)@denise) Used size: 13221994 bytes > [ 0.003333] (1:(null)@denise) Create a 200000 bytes file named '/home/tmp/data.txt' on /sd1 > [ 0.003333] (1:(null)@denise) File Descriptor information: -> Full path: '/home/tmp/data.txt' -> Size: 200000 -> Mount point: '/home' -> Storage Id: 'Disk4' -> Storage Type: 'single_SSD' -> Content Type: 'txt_unix' +> Full path: '/home/tmp/data.txt' +> Size: 200000 +> Mount point: '/home' +> Storage Id: 'Disk4' +> Storage Type: 'single_SSD' +> Content Type: 'txt_unix' > [ 0.003333] (1:(null)@denise) Free size: 536857490006 bytes > [ 0.003333] (1:(null)@denise) Used size: 13421994 bytes > [ 0.004583] (1:(null)@denise) Read 200000 bytes on /home/tmp/data.txt > [ 0.007917] (1:(null)@denise) Write 100000 bytes on /home/tmp/data.txt > [ 0.007917] (1:(null)@denise) File Descriptor information: -> Full path: '/home/tmp/data.txt' -> Size: 300000 -> Mount point: '/home' -> Storage Id: 'Disk4' -> Storage Type: 'single_SSD' -> Content Type: 'txt_unix' +> Full path: '/home/tmp/data.txt' +> Size: 300000 +> Mount point: '/home' +> Storage Id: 'Disk4' +> Storage Type: 'single_SSD' +> Content Type: 'txt_unix' > [ 0.007917] (1:(null)@denise) *** Renaming '/tmp/data.txt' into '/tmp/simgrid.readme' > [ 0.007917] (1:(null)@denise) *** Get/set data for storage element: Disk4 *** > [ 0.007917] (1:(null)@denise) Get data: '(null)' @@ -104,4 +104,3 @@ $ ${bindir:=.}/io/storage ${srcdir:=.}/examples/platforms/storage.xml "--log=roo > [ 0.007917] (1:(null)@denise) /include/surf/simgrid_dtd.h size: 23583 bytes > [ 0.007917] (1:(null)@denise) /bin/smpicc size: 918 bytes > [ 0.007917] (0:@) Simulated time: 0.00791667 - diff --git a/src/surf/storage_n11.cpp b/src/surf/storage_n11.cpp index e384fb8a4b..2856220bf1 100644 --- a/src/surf/storage_n11.cpp +++ b/src/surf/storage_n11.cpp @@ -430,7 +430,7 @@ StorageActionPtr StorageN11::open(const char* mount, char* path) StorageActionPtr action = new StorageN11Action(getModel(), 0, getState() != SURF_RESOURCE_ON, this, OPEN); action->p_file = file; - + free(path); return action; } diff --git a/src/surf/workstation_interface.cpp b/src/surf/workstation_interface.cpp index ca42c31952..8ff047a8d5 100644 --- a/src/surf/workstation_interface.cpp +++ b/src/surf/workstation_interface.cpp @@ -207,33 +207,35 @@ ActionPtr Workstation::open(const char* fullpath) { s_mount_t mnt; unsigned int cursor; size_t pos = 0; - char *path, *mount_name; + char *path, *mount_name, *file_mount_name; + XBT_DEBUG("Search for storage name for '%s' on '%s'", fullpath, getName()); xbt_dynar_foreach(p_storage,cursor,mnt) { XBT_DEBUG("See '%s'",mnt.name); - char *file_mount_name = NULL; - file_mount_name = xbt_new(char,strlen(mnt.name)+1); + + file_mount_name = (char *) xbt_malloc ((strlen(mnt.name)+1) * sizeof (char)); strncpy(file_mount_name,fullpath,strlen(mnt.name)); file_mount_name[strlen(mnt.name)] = '\0'; if(!strcmp(file_mount_name,mnt.name) && strlen(mnt.name)>pos) {/* The current mount name is found in the full path and is bigger than the previous*/ - pos = strlen(mnt.name); - mount_name = mnt.name; - st = static_cast(mnt.storage); + pos = strlen(mnt.name); + mount_name = mnt.name; + st = static_cast(mnt.storage); } - xbt_free(file_mount_name); } if(pos>0) { /* Mount point found, deduce path + file name from full path (full path = mount name + path + file name)*/ - path = xbt_new(char, strlen(fullpath)-strlen(mount_name)); - strncpy(path, fullpath+pos, strlen(fullpath)-strlen(mount_name)+1); + path = (char *) xbt_malloc ((strlen(fullpath)-strlen(mount_name)+1) * sizeof (char)); + strncpy(path, fullpath+pos, strlen(fullpath)-strlen(mount_name)); + path[strlen(fullpath)-strlen(mount_name)] = '\0'; } else xbt_die("Can't find mount point for '%s' on '%s'", fullpath, getName()); + free(file_mount_name); return st->open(mount_name, path); } diff --git a/teshsuite/msg/storage/storage_basic.tesh b/teshsuite/msg/storage/storage_basic.tesh index e9147a2108..ade43d61a2 100644 --- a/teshsuite/msg/storage/storage_basic.tesh +++ b/teshsuite/msg/storage/storage_basic.tesh @@ -1,60 +1,61 @@ -$ msg/storage/storage_basic --cfg=path:${srcdir:=.} ${srcdir:=.}/msg/storage/platform.xml ${srcdir:=.}/msg/storage/deployment.xml "--log=root.fmt:> > [%10.6r]%e(%i:%P@%h)%e%m%n" -> [server:server:(1) 0.000000] > [storage/INFO] *** Storage info on server *** -> [server:server:(1) 0.000000] > [storage/INFO] Storage name: sdisk1, mount name: /sd1 -> [server:server:(1) 0.000000] > [storage/INFO] Free size: 322122547160 bytes -> [server:server:(1) 0.000000] > [storage/INFO] Used size: 40 bytes -> [server:server:(1) 0.000000] > [storage/INFO] Properties of mounted storage: sdisk1 -> [server:server:(1) 0.000000] > [storage/INFO] 'usage' -> 'File system' -> [server:server:(1) 0.000000] > [storage/INFO] *** Dump a storage element *** -> [server:server:(1) 0.000000] > [storage/INFO] Print the content of the storage element: sdisk1 -> [server:server:(1) 0.000000] > [storage/INFO] /doc/simgrid/examples/cxx/autoDestination/Master.cxx size: 10 bytes -> [server:server:(1) 0.000000] > [storage/INFO] /doc/simgrid/examples/cxx/basic/FinalizeTask.cxx size: 10 bytes -> [server:server:(1) 0.000000] > [storage/INFO] /doc/simgrid/examples/cxx/autoDestination/Forwarder.cxx size: 10 bytes -> [server:server:(1) 0.000000] > [storage/INFO] /doc/simgrid/examples/cxx/autoDestination/autoDestination_platform.xml size: 10 bytes -> [server:server:(1) 0.000000] > [storage/INFO] Storage name: sdisk2, mount name: /sd2 -> [server:server:(1) 0.000000] > [storage/INFO] Free size: 805306367980 bytes -> [server:server:(1) 0.000000] > [storage/INFO] Used size: 20 bytes -> [server:server:(1) 0.000000] > [storage/INFO] Properties of mounted storage: sdisk2 -> [server:server:(1) 0.000000] > [storage/INFO] 'usage' -> 'Cache' -> [server:server:(1) 0.000000] > [storage/INFO] *** Dump a storage element *** -> [server:server:(1) 0.000000] > [storage/INFO] Print the content of the storage element: sdisk2 -> [server:server:(1) 0.000000] > [storage/INFO] /doc/simgrid/examples/cxx/basic/Main.cxx size: 10 bytes -> [server:server:(1) 0.000000] > [storage/INFO] /doc/simgrid/examples/cxx/basic/Slave.cxx size: 10 bytes -> [server:server:(1) 0.000000] > [storage/INFO] Server waiting for transfers ... -> [client:client:(2) 0.005000] > [storage/INFO] client has read 500001 on /sd1/doc/simgrid/examples/cxx/autoDestination/FinalizeTask.cxx -> [client:client:(2) 0.005000] > [storage/INFO] client sends 500001 to server -> [server:server:(1) 0.026647] > [storage/INFO] 500001 bytes on 500001 bytes have been written by server on /sd1 -> [client:client:(2) 0.417980] > [storage/INFO] client has read 800000 on /sd1/doc/simgrid/examples/cxx/autoDestination/autoDestination_deployment.xml -> [client:client:(2) 0.417980] > [storage/INFO] client sends 800000 to server -> [server:server:(1) 0.452225] > [storage/INFO] 800000 bytes on 800000 bytes have been written by server on /sd1 -> [client:client:(2) 1.283559] > [storage/INFO] client has read 45800000 on /sd1/doc/simgrid/examples/cxx/autoDestination/Slave.cxx -> [client:client:(2) 1.283559] > [storage/INFO] client sends 45800000 to server -> [server:server:(1) 3.207494] > [storage/INFO] 45800000 bytes on 45800000 bytes have been written by server on /sd1 -> [client:client:(2) 3.208145] > [storage/INFO] *** GET/SET DATA for storage element: cdisk *** -> [client:client:(2) 3.208145] > [storage/INFO] Get data: '(null)' -> [client:client:(2) 3.208145] > [storage/INFO] Set and get data: 'Some data' -> [server:server:(1) 3.208145] > [storage/INFO] *** Storage info on server *** -> [server:server:(1) 3.208145] > [storage/INFO] Storage name: sdisk1, mount name: /sd1 -> [server:server:(1) 3.208145] > [storage/INFO] Free size: 322122547160 bytes -> [server:server:(1) 3.208145] > [storage/INFO] Used size: 40 bytes -> [server:server:(1) 3.208145] > [storage/INFO] Properties of mounted storage: sdisk1 -> [server:server:(1) 3.208145] > [storage/INFO] 'usage' -> 'File system' -> [server:server:(1) 3.208145] > [storage/INFO] *** Dump a storage element *** -> [server:server:(1) 3.208145] > [storage/INFO] Print the content of the storage element: sdisk1 -> [server:server:(1) 3.208145] > [storage/INFO] /doc/simgrid/examples/cxx/autoDestination/Master.cxx size: 10 bytes -> [server:server:(1) 3.208145] > [storage/INFO] /doc/simgrid/examples/cxx/basic/FinalizeTask.cxx size: 10 bytes -> [server:server:(1) 3.208145] > [storage/INFO] /doc/simgrid/examples/cxx/autoDestination/Forwarder.cxx size: 10 bytes -> [server:server:(1) 3.208145] > [storage/INFO] /doc/simgrid/examples/cxx/autoDestination/autoDestination_platform.xml size: 10 bytes -> [server:server:(1) 3.208145] > [storage/INFO] Storage name: sdisk2, mount name: /sd2 -> [server:server:(1) 3.208145] > [storage/INFO] Free size: 805259267979 bytes -> [server:server:(1) 3.208145] > [storage/INFO] Used size: 47100021 bytes -> [server:server:(1) 3.208145] > [storage/INFO] Properties of mounted storage: sdisk2 -> [server:server:(1) 3.208145] > [storage/INFO] 'usage' -> 'Cache' -> [server:server:(1) 3.208145] > [storage/INFO] *** Dump a storage element *** -> [server:server:(1) 3.208145] > [storage/INFO] Print the content of the storage element: sdisk2 -> [server:server:(1) 3.208145] > [storage/INFO] /scratch/titi.xml size: 800000 bytes -> [server:server:(1) 3.208145] > [storage/INFO] /scratch/tata.cxx size: 45800000 bytes -> [server:server:(1) 3.208145] > [storage/INFO] /doc/simgrid/examples/cxx/basic/Main.cxx size: 10 bytes -> [server:server:(1) 3.208145] > [storage/INFO] /scratch/toto.cxx size: 500001 bytes -> [server:server:(1) 3.208145] > [storage/INFO] /doc/simgrid/examples/cxx/basic/Slave.cxx size: 10 bytes -> [3.208145] > [storage/INFO] Simulated time: 3.20814 +$ msg/storage/storage_basic ${srcdir:=.}/msg/storage/platform.xml ${srcdir:=.}/msg/storage/deployment.xml 0 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (1:server@server) *** Storage info on server *** +> [ 0.000000] (1:server@server) Storage name: sdisk1, mount name: /sd1 +> [ 0.000000] (1:server@server) Free size: 322122547160 bytes +> [ 0.000000] (1:server@server) Used size: 40 bytes +> [ 0.000000] (1:server@server) Properties of mounted storage: sdisk1 +> [ 0.000000] (1:server@server) 'usage' -> 'File system' +> [ 0.000000] (1:server@server) *** Dump a storage element *** +> [ 0.000000] (1:server@server) Print the content of the storage element: sdisk1 +> [ 0.000000] (1:server@server) /doc/simgrid/examples/cxx/autoDestination/Master.cxx size: 10 bytes +> [ 0.000000] (1:server@server) /doc/simgrid/examples/cxx/basic/FinalizeTask.cxx size: 10 bytes +> [ 0.000000] (1:server@server) /doc/simgrid/examples/cxx/autoDestination/Forwarder.cxx size: 10 bytes +> [ 0.000000] (1:server@server) /doc/simgrid/examples/cxx/autoDestination/autoDestination_platform.xml size: 10 bytes +> [ 0.000000] (1:server@server) Storage name: sdisk2, mount name: /sd2 +> [ 0.000000] (1:server@server) Free size: 805306367980 bytes +> [ 0.000000] (1:server@server) Used size: 20 bytes +> [ 0.000000] (1:server@server) Properties of mounted storage: sdisk2 +> [ 0.000000] (1:server@server) 'usage' -> 'Cache' +> [ 0.000000] (1:server@server) *** Dump a storage element *** +> [ 0.000000] (1:server@server) Print the content of the storage element: sdisk2 +> [ 0.000000] (1:server@server) /doc/simgrid/examples/cxx/basic/Main.cxx size: 10 bytes +> [ 0.000000] (1:server@server) /doc/simgrid/examples/cxx/basic/Slave.cxx size: 10 bytes +> [ 0.000000] (1:server@server) Server waiting for transfers ... +> [ 0.005000] (2:client@client) client has read 500001 on /sd1/doc/simgrid/examples/cxx/autoDestination/FinalizeTask.cxx +> [ 0.005000] (2:client@client) client sends 500001 to server +> [ 0.026647] (1:server@server) 500001 bytes on 500001 bytes have been written by server on /sd1 +> [ 0.417980] (2:client@client) client has read 800000 on /sd1/doc/simgrid/examples/cxx/autoDestination/autoDestination_deployment.xml +> [ 0.417980] (2:client@client) client sends 800000 to server +> [ 0.452225] (1:server@server) 800000 bytes on 800000 bytes have been written by server on /sd1 +> [ 1.283559] (2:client@client) client has read 45800000 on /sd1/doc/simgrid/examples/cxx/autoDestination/Slave.cxx +> [ 1.283559] (2:client@client) client sends 45800000 to server +> [ 3.207494] (1:server@server) 45800000 bytes on 45800000 bytes have been written by server on /sd1 +> [ 3.208145] (2:client@client) *** GET/SET DATA for storage element: cdisk *** +> [ 3.208145] (2:client@client) Get data: '(null)' +> [ 3.208145] (2:client@client) Set and get data: 'Some data' +> [ 3.208145] (1:server@server) *** Storage info on server *** +> [ 3.208145] (1:server@server) Storage name: sdisk1, mount name: /sd1 +> [ 3.208145] (1:server@server) Free size: 322122547160 bytes +> [ 3.208145] (1:server@server) Used size: 40 bytes +> [ 3.208145] (1:server@server) Properties of mounted storage: sdisk1 +> [ 3.208145] (1:server@server) 'usage' -> 'File system' +> [ 3.208145] (1:server@server) *** Dump a storage element *** +> [ 3.208145] (1:server@server) Print the content of the storage element: sdisk1 +> [ 3.208145] (1:server@server) /doc/simgrid/examples/cxx/autoDestination/Master.cxx size: 10 bytes +> [ 3.208145] (1:server@server) /doc/simgrid/examples/cxx/basic/FinalizeTask.cxx size: 10 bytes +> [ 3.208145] (1:server@server) /doc/simgrid/examples/cxx/autoDestination/Forwarder.cxx size: 10 bytes +> [ 3.208145] (1:server@server) /doc/simgrid/examples/cxx/autoDestination/autoDestination_platform.xml size: 10 bytes +> [ 3.208145] (1:server@server) Storage name: sdisk2, mount name: /sd2 +> [ 3.208145] (1:server@server) Free size: 805259267979 bytes +> [ 3.208145] (1:server@server) Used size: 47100021 bytes +> [ 3.208145] (1:server@server) Properties of mounted storage: sdisk2 +> [ 3.208145] (1:server@server) 'usage' -> 'Cache' +> [ 3.208145] (1:server@server) *** Dump a storage element *** +> [ 3.208145] (1:server@server) Print the content of the storage element: sdisk2 +> [ 3.208145] (1:server@server) /scratch/titi.xml size: 800000 bytes +> [ 3.208145] (1:server@server) /scratch/tata.cxx size: 45800000 bytes +> [ 3.208145] (1:server@server) /doc/simgrid/examples/cxx/basic/Main.cxx size: 10 bytes +> [ 3.208145] (1:server@server) /scratch/toto.cxx size: 500001 bytes +> [ 3.208145] (1:server@server) /doc/simgrid/examples/cxx/basic/Slave.cxx size: 10 bytes +> [ 3.208145] (0:@) Simulated time: 3.20814 + -- 2.20.1