[Spread-users] size_t problem in spread on 64bit platforms
Melissa Jenkins
melissa-spread at temeletry.co.uk
Thu Jul 1 05:09:23 EDT 2010
Just in case anybody has been trying to run Spread on 64bit boxes.
I have had all sorts of strange problems sending UDP messages on FreeBSD 8 with the amd64 kernel. Sometimes they would go, sometimes not, often the Spread network groups would not form and the Spread daemons would not talk to each other.
I believe I have traced them down to scatter.h defining an iovec equivalent that is size 'int'. According to configure output int is 4 bytes. According to the man pages for iovec the sizes are size_t, which is 8 bytes.
changing scatter.h to the following:
/* scat_element is EXACTLY as defined in iovec */
typedef struct dummy_scat_element{
char *buf;
size_t len;
} scat_element;
typedef struct dummy_scatter {
size_t num_elements;
scat_element elements[ARCH_SCATTER_SIZE];
} sys_scatter;
typedef struct dummy_big_scatter {
size_t num_elements;
scat_element elements[MAX_SCATTER_ELEMENTS];
} scatter;
#endif /* INC_SCATTER */
Seems to work a lot better :) I have been using this in for a couple of weeks and the groups can form :) I'd think a more portable change would be to use a typedef iovec dummy_scat_element on platforms with iovec and using the existing definition on ones that don't.
Mel
PS: spread at spread.org seems to bounce
More information about the Spread-users
mailing list