% MagickCore Distributed Pixel Cache Methods %
% %
% Software Design %
-% John Cristy %
+% Cristy %
% January 2013 %
% %
% %
-% Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
#include "MagickCore/list.h"
#include "MagickCore/locale_.h"
#include "MagickCore/memory_.h"
+#include "MagickCore/nt-base-private.h"
#include "MagickCore/pixel.h"
#include "MagickCore/policy.h"
#include "MagickCore/random_.h"
#include "MagickCore/string-private.h"
#include "MagickCore/version.h"
#include "MagickCore/version-private.h"
-#if defined(MAGICKCORE_HAVE_SOCKET)
+#if defined(MAGICKCORE_HAVE_SOCKET) && defined(MAGICKCORE_THREAD_SUPPORT)
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
+#else
+#undef send
+#undef recv
+#define send(file,buffer,length,flags) 0
+#define recv(file,buffer,length,flags) 0
#endif
\f
/*
ssize_t
count;
+#if !defined(MAGICKCORE_HAVE_SOCKET) || !defined(MAGICKCORE_THREAD_SUPPORT)
+ magick_unreferenced(file);
+ magick_unreferenced(message);
+#endif
+
count=0;
for (i=0; i < (MagickOffsetType) length; i+=count)
{
static int ConnectPixelCacheServer(const char *hostname,const int port,
size_t *session_key,ExceptionInfo *exception)
{
-#if defined(MAGICKCORE_HAVE_SOCKET)
+#if defined(MAGICKCORE_HAVE_SOCKET) && defined(MAGICKCORE_THREAD_SUPPORT)
char
service[MaxTextExtent];
result->ai_protocol);
if (client_socket == -1)
{
+ (void) close(client_socket);
(void) ThrowMagickException(exception,GetMagickModule(),CacheError,
"DistributedPixelCache","'%s'",hostname);
return(-1);
/*
Parse host list (e.g. 192.168.100.1:6668,192.168.100.2:6668).
*/
- hosts=(char *) GetImageRegistry(StringRegistryType,"cache:hosts",
- exception);
+ hosts=(char *) GetImageRegistry(StringRegistryType,"cache:hosts",exception);
if (hosts == (char *) NULL)
{
*port=DPCPort;
hostname=DestroyString(hostname);
if (server_info->file == -1)
server_info=DestroyDistributeCacheInfo(server_info);
+ server_info->debug=IsEventLogging();
return(server_info);
}
\f
*/
static MagickBooleanType DestroyDistributeCache(SplayTreeInfo *registry,
- int file,const size_t session_key)
+ int magick_unused(file),const size_t session_key)
{
/*
Destroy distributed pixel cache.
*/
+ magick_unreferenced(file);
return(DeleteNodeFromSplayTree(registry,(const void *) session_key));
}
register MagickOffsetType
i;
+#if !defined(MAGICKCORE_HAVE_SOCKET) || !defined(MAGICKCORE_THREAD_SUPPORT)
+ magick_unreferenced(file);
+ magick_unreferenced(message);
+#endif
+
/*
Ensure a complete message is sent.
*/
return(i);
}
-static MagickBooleanType OpenDistributeCache(SplayTreeInfo *registry,
- int file,const size_t session_key,ExceptionInfo *exception)
+static MagickBooleanType OpenDistributeCache(SplayTreeInfo *registry,int file,
+ const size_t session_key,ExceptionInfo *exception)
{
Image
*image;
if (image == (Image *) NULL)
return(MagickFalse);
length=sizeof(image->storage_class)+sizeof(image->colorspace)+
- sizeof(image->alpha_trait)+sizeof(image->mask)+sizeof(image->columns)+
- sizeof(image->rows)+sizeof(image->number_channels)+MaxPixelChannels*
- sizeof(*image->channel_map)+sizeof(image->metacontent_extent);
+ sizeof(image->alpha_trait)+sizeof(image->read_mask)+
+ sizeof(image->write_mask)+sizeof(image->columns)+sizeof(image->rows)+
+ sizeof(image->number_channels)+MaxPixelChannels*sizeof(*image->channel_map)+
+ sizeof(image->metacontent_extent);
count=dpc_read(file,length,message);
if (count != (MagickOffsetType) length)
return(MagickFalse);
p+=sizeof(image->colorspace);
(void) memcpy(&image->alpha_trait,p,sizeof(image->alpha_trait));
p+=sizeof(image->alpha_trait);
- (void) memcpy(&image->mask,p,sizeof(image->mask));
- p+=sizeof(image->mask);
+ (void) memcpy(&image->read_mask,p,sizeof(image->read_mask));
+ p+=sizeof(image->read_mask);
+ (void) memcpy(&image->write_mask,p,sizeof(image->write_mask));
+ p+=sizeof(image->write_mask);
(void) memcpy(&image->columns,p,sizeof(image->columns));
p+=sizeof(image->columns);
(void) memcpy(&image->rows,p,sizeof(image->rows));
exception);
if (p == (const Quantum *) NULL)
return(MagickFalse);
- metacontent=GetVirtualMetacontent(image);
+ metacontent=(const unsigned char *) GetVirtualMetacontent(image);
count=dpc_send(file,length,metacontent);
if (count != (MagickOffsetType) length)
return(MagickFalse);
exception);
if (q == (Quantum *) NULL)
return(MagickFalse);
- metacontent=GetAuthenticMetacontent(image);
+ metacontent=(unsigned char *) GetAuthenticMetacontent(image);
count=dpc_read(file,length,metacontent);
if (count != (MagickOffsetType) length)
return(MagickFalse);
/*
Launch distributed pixel cache server.
*/
+ assert(exception != (ExceptionInfo *) NULL);
+ assert(exception->signature == MagickSignature);
(void) ResetMagickMemory(&hint,0,sizeof(hint));
hint.ai_family=AF_INET;
hint.ai_socktype=SOCK_STREAM;
status=setsockopt(server_socket,SOL_SOCKET,SO_REUSEADDR,&one,(socklen_t)
sizeof(one));
if (status == -1)
- continue;
+ {
+ (void) close(server_socket);
+ continue;
+ }
status=bind(server_socket,p->ai_addr,p->ai_addrlen);
if (status == -1)
{
- (void) close(status);
+ (void) close(server_socket);
continue;
}
break;
p+=sizeof(image->colorspace);
(void) memcpy(p,&image->alpha_trait,sizeof(image->alpha_trait));
p+=sizeof(image->alpha_trait);
- (void) memcpy(p,&image->mask,sizeof(image->mask));
- p+=sizeof(image->mask);
+ (void) memcpy(p,&image->read_mask,sizeof(image->read_mask));
+ p+=sizeof(image->read_mask);
+ (void) memcpy(p,&image->write_mask,sizeof(image->write_mask));
+ p+=sizeof(image->write_mask);
(void) memcpy(p,&image->columns,sizeof(image->columns));
p+=sizeof(image->columns);
(void) memcpy(p,&image->rows,sizeof(image->rows));
%
% MagickOffsetType ReadDistributePixelCachePixels(
% DistributeCacheInfo *server_info,const RectangleInfo *region,
-% const MagickSizeType length,unsigned char *pixels)
+% const MagickSizeType length,unsigned char *restrict pixels)
%
% A description of each parameter follows:
%
*/
MagickPrivate MagickOffsetType ReadDistributePixelCachePixels(
DistributeCacheInfo *server_info,const RectangleInfo *region,
- const MagickSizeType length,unsigned char *pixels)
+ const MagickSizeType length,unsigned char *restrict pixels)
{
MagickOffsetType
count;
%
% MagickBooleanType WriteDistributePixelCachePixels(
% DistributeCacheInfo *server_info,const RectangleInfo *region,
-% const MagickSizeType length,const unsigned char *pixels)
+% const MagickSizeType length,const unsigned char *restrict pixels)
%
% A description of each parameter follows:
%
*/
MagickPrivate MagickOffsetType WriteDistributePixelCachePixels(
DistributeCacheInfo *server_info,const RectangleInfo *region,
- const MagickSizeType length,const unsigned char *pixels)
+ const MagickSizeType length,const unsigned char *restrict pixels)
{
MagickOffsetType
count;