 |
My Project
debian-1:4.1.2-p1+ds-2
|
Go to the source code of this file.
◆ sig_chld_hdl()
void sig_chld_hdl |
( |
int |
| ) |
|
additional default signal handler
some newer Linux version cannot have SIG_IGN for SIGCHLD, so use this nice routine here: SuSe 9.x reports -1 always Redhat 9.x/FC x reports sometimes -1 see also: hpux_system also needed by getrusage (timer etc.)
- Parameters
-
Definition at line 2032 of file ssiLink.cc.
2041 kidpid = si_waitpid(-1, &
status, WNOHANG);
2045 if (errno == EINTR)
continue;
2049 else if (kidpid==0)
break;
◆ slInitSsiExtension()
si_link_extension slInitSsiExtension |
( |
si_link_extension |
s | ) |
|
◆ slStatusSsi()
Definition at line 1662 of file ssiLink.cc.
1667 if (d==
NULL)
return "not open";
1668 if (((strcmp(
l->mode,
"fork")==0)
1669 ||(strcmp(
l->mode,
"tcp")==0)
1670 ||(strcmp(
l->mode,
"connect")==0))
1671 && (strcmp(request,
"read") == 0))
1688 case 0:
return "not ready";
1689 case -1:
return "error";
1696 if (c== -1)
return "eof";
1697 else if (isdigit(c))
1701 Werror(
"unknown char in ssiLink(%d)",c);
1707 else if (strcmp(request,
"read") == 0)
1710 else return "not ready";
1712 else if (strcmp(request,
"write") == 0)
1715 else return "not ready";
◆ ssiClose()
Definition at line 1228 of file ssiLink.cc.
1248 si_waitpid(d->
pid,
NULL,WNOHANG);
1250 && (kill(d->
pid,0)==0))
1254 t.tv_nsec=100000000;
1255 struct timespec
rem;
1260 r = nanosleep(&t, &
rem);
1263 if (si_waitpid(d->
pid,
NULL,WNOHANG) != 0)
break;
1265 if ((r==0) || (errno != EINTR))
break;
1267 if (kill(d->
pid,0) == 0)
1275 r = nanosleep(&t, &
rem);
1278 if (si_waitpid(d->
pid,
NULL,WNOHANG) != 0)
break;
1280 if ((r==0) || (errno != EINTR))
break;
1282 if (kill(d->
pid,0) == 0)
1291 if ((strcmp(
l->mode,
"tcp")==0)
1292 || (strcmp(
l->mode,
"fork")==0))
◆ ssiCommandLink()
Definition at line 1961 of file ssiLink.cc.
1967 WerrorS(
"ERROR no reverved port requested");
1970 struct sockaddr_in cli_addr;
1971 int clilen =
sizeof(cli_addr);
1972 int newsockfd = si_accept(
ssiReserved_sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1975 Werror(
"ERROR on accept (errno=%d)",errno);
1980 si_link_extension prev =
s;
1981 while (strcmp(
s->type,
"ssi") != 0)
1983 if (
s->next ==
NULL)
2010 d->
f_write = fdopen(newsockfd,
"w");
◆ ssiOpen()
Definition at line 843 of file ssiLink.cc.
853 if (
l->mode[0] !=
'\0' && (strcmp(
l->mode,
"r") == 0))
859 else if (strcmp(
l->mode,
"w") == 0) mode =
"w";
860 else if (strcmp(
l->mode,
"fork") == 0) mode =
"fork";
861 else if (strcmp(
l->mode,
"tcp") == 0) mode =
"tcp";
862 else if (strcmp(
l->mode,
"connect") == 0) mode =
"connect";
872 if (
l->name[0] ==
'\0')
874 if (strcmp(mode,
"fork")==0)
887 if (pid == -1 && errno == EAGAIN)
900 sigemptyset(&sigint);
901 sigaddset(&sigint, SIGINT);
902 sigprocmask(SIG_BLOCK, &sigint,
NULL);
920 #ifdef HAVE_SIMPLEIPC
922 #endif // HAVE_SIMPLEIPC
923 si_close(pc[1]); si_close(cp[0]);
962 si_close(pc[0]); si_close(cp[1]);
974 Werror(
"fork failed (%d)",errno);
981 else if (strcmp(mode,
"tcp")==0)
983 int sockfd, newsockfd, portno, clilen;
984 struct sockaddr_in serv_addr, cli_addr;
985 sockfd = socket(AF_INET, SOCK_STREAM, 0);
988 WerrorS(
"ERROR opening socket");
993 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
995 serv_addr.sin_family = AF_INET;
996 serv_addr.sin_addr.s_addr = INADDR_ANY;
1000 serv_addr.sin_port = htons(portno);
1003 WerrorS(
"ERROR on binding (no free port available?)");
1009 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1012 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1020 PrintS(
"client accepted\n");
1024 d->
f_write = fdopen(newsockfd,
"w");
1031 Werror(
"invalid mode >>%s<< for ssi",mode);
1041 if(strcmp(mode,
"tcp")==0)
1043 int sockfd, newsockfd, portno, clilen;
1044 struct sockaddr_in serv_addr, cli_addr;
1045 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1048 WerrorS(
"ERROR opening socket");
1053 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
1055 serv_addr.sin_family = AF_INET;
1056 serv_addr.sin_addr.s_addr = INADDR_ANY;
1060 serv_addr.sin_port = htons(portno);
1063 WerrorS(
"ERROR on binding (no free port available?)");
1068 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1071 char* cli_host = (
char*)
omAlloc(256);
1072 char* path = (
char*)
omAlloc(1024);
1073 int r = si_sscanf(
l->name,
"%255[^:]:%s",cli_host,path);
1076 WerrorS(
"ERROR: no host specified");
1085 WarnS(
"program not specified, using /usr/local/bin/Singular");
1087 strcpy(path,
"/usr/local/bin/Singular");
1089 char* ssh_command = (
char*)
omAlloc(256);
1090 char* ser_host = (
char*)
omAlloc(64);
1091 gethostname(ser_host,64);
1092 sprintf(ssh_command,
"ssh %s %s -q --batch --link=ssi --MPhost=%s --MPport=%d &",cli_host,path,ser_host,portno);
1100 clilen =
sizeof(cli_addr);
1101 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1113 d->
f_write = fdopen(newsockfd,
"w");
1125 else if(strcmp(mode,
"connect")==0)
1127 char* host = (
char*)
omAlloc(256);
1129 struct sockaddr_in serv_addr;
1130 struct hostent *server;
1132 si_sscanf(
l->name,
"%255[^:]:%d",host,&portno);
1136 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1137 if (sockfd < 0) {
WerrorS(
"ERROR opening socket");
return TRUE; }
1138 server = gethostbyname(host);
1140 memset((
char *) &serv_addr, 0,
sizeof(serv_addr));
1141 serv_addr.sin_family = AF_INET;
1142 memcpy((
char *)&serv_addr.sin_addr.s_addr,
1143 (
char *)server->h_addr,
1145 serv_addr.sin_port = htons(portno);
1146 if (si_connect(sockfd,(sockaddr*)&serv_addr,
sizeof(serv_addr)) < 0)
1147 {
Werror(
"ERROR connecting(errno=%d)",errno);
return TRUE; }
1151 d->
f_write=fdopen(sockfd,
"w");
1168 char *filename=
l->name;
1170 if(filename[0]==
'>')
1172 if (filename[1]==
'>')
1183 outfile=
myfopen(filename,mode);
1186 if (strcmp(
l->mode,
"r")==0)
◆ ssiRead1()
Definition at line 1322 of file ssiLink.cc.
1349 res->data=(
char*)d->
r;
1361 if (d->
r==
NULL)
goto no_ring;
1365 if (d->
r==
NULL)
goto no_ring;
1369 if (d->
r==
NULL)
goto no_ring;
1373 if (d->
r==
NULL)
goto no_ring;
1379 if (d->
r==
NULL)
goto no_ring;
1391 int nok=
res->Eval();
1392 if (nok)
WerrorS(
"error in eval");
1399 int nok=
res->Eval();
1400 if (nok)
WerrorS(
"error in name lookup");
1438 Print(
"incompatible versions of ssi: %d/%d vs %d/%d\n",
1443 Print(
"// opening ssi-%d, MAX_TOK=%d\n",n98_v,n98_m);
1457 default:
Werror(
"not implemented (t:%d)",t);
1466 && (
res->RingDependend()))
◆ ssiRead2()
◆ ssiWrite()
Definition at line 1493 of file ssiLink.cc.
1505 void *dd=data->Data();
1506 attr *aa=data->Attribute();
1513 fprintf(d->
f_write,
"21 %d %d ",data->flag,n);
1515 else if (data->flag!=0)
1517 fprintf(d->
f_write,
"21 %d 0 ",data->flag);
1590 fprintf(d->
f_write,
"10 %d ",(
int)
M->rank);
1627 b->blackbox_serialize(
b,dd,
l);
1631 Werror(
"not implemented (t:%d, rtyp:%d)",tt, data->rtyp);
void ssiWritePoly(const ssiInfo *d, int typ, poly p)
BOOLEAN ssiWrite(si_link l, leftv data)
char * fe_fgets_dummy(const char *, char *, int)
BOOLEAN ssiOpen(si_link l, short flag, leftv u)
intvec * ssiReadIntmat(const ssiInfo *d)
VAR link_list ssiToBeClosed
STATIC_VAR int ssiReserved_P
BOOLEAN ssiClose(si_link l)
#define SI_LINK_SET_CLOSE_P(l)
void ssiWriteIntvec(const ssiInfo *d, intvec *v)
matrix ssiReadMatrix(const ssiInfo *d)
int ssiReadInt(s_buff fich)
VAR BOOLEAN singular_in_batchmode
void ssiReadBlackbox(leftv res, si_link l)
VAR omBin s_si_link_extension_bin
BOOLEAN ssiSetCurrRing(const ring r)
command ssiReadCommand(si_link l)
void ssiWriteIntmat(const ssiInfo *d, intvec *v)
BOOLEAN ssiSetRing(si_link l, ring r, BOOLEAN send)
leftv ssiRead1(si_link l)
char *(* fe_fgets_stdin)(const char *pr, char *s, int size)
void ssiWriteNumber(const ssiInfo *d, const number n)
ring sBucketGetRing(const sBucket_pt bucket)
Returns bucket ring.
Class used for (list of) interpreter objects.
BOOLEAN slOpen(si_link l, short flag, leftv h)
void ssiWriteBigintmat(const ssiInfo *d, bigintmat *v)
void ssiWriteProc(const ssiInfo *d, procinfov p)
char * ssiReadString(const ssiInfo *d)
#define SI_LINK_W_OPEN_P(l)
EXTERN_VAR omBin sleftv_bin
bigintmat * ssiReadBigintmat(const ssiInfo *d)
BOOLEAN ssiDump(si_link l)
poly sBucketPeek(sBucket_pt b)
void PrintS(const char *s)
#define omFreeSize(addr, size)
void ssiWriteIdeal(const ssiInfo *d, int typ, const ideal I)
number ssiReadBigInt(const ssiInfo *d)
BOOLEAN ssiGetDump(si_link l)
#define SI_LINK_R_OPEN_P(l)
intvec * ssiReadIntvec(const ssiInfo *d)
STATIC_VAR int ssiReserved_sockfd
s_buff s_open_by_name(const char *n)
void ssiWriteCommand(si_link l, command D)
void ssiWriteString(const ssiInfo *d, const char *s)
void s_ungetc(int c, s_buff F)
number ssiReadNumber(const ssiInfo *d)
VAR volatile BOOLEAN ssiToBeClosed_inactive
#define SI_LINK_OPEN_P(l)
leftv(* slRead2Proc)(si_link l, leftv a)
lists ssiReadList(si_link l)
void ssiWriteInt(const ssiInfo *d, const int i)
STATIC_VAR int ssiReserved_Clients
procinfov ssiReadProc(const ssiInfo *d)
EXTERN_VAR si_link_extension si_link_root
void ssiReadRingProperties(si_link l)
ideal ssiReadIdeal(const ssiInfo *d)
void ssiReadAttrib(leftv res, si_link l)
poly ssiReadPoly(const ssiInfo *D)
ring ssiReadRing(const ssiInfo *d)
FILE * myfopen(const char *path, const char *mode)
void ssiWriteList(si_link l, lists dd)
void Werror(const char *fmt,...)
BOOLEAN slClose(si_link l)
void ssiWriteBigInt(const ssiInfo *d, const number n)
#define SIPC_MAX_SEMAPHORES
void WerrorS(const char *s)
VAR char my_yylinebuf[80]
si_link_extension slInitSsiExtension(si_link_extension s)
VAR int sem_acquired[SIPC_MAX_SEMAPHORES]
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
const CanonicalForm int s
#define SI_LINK_SET_RW_OPEN_P(l)
const char * slStatusSsi(si_link l, const char *request)
#define omFreeBin(addr, bin)
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
#define SI_LINK_SET_OPEN_P(l, flag)
void rem(unsigned long *a, unsigned long *q, unsigned long p, int °a, int degq)
void ssiWriteRing(ssiInfo *d, const ring r)