void SCI_Transporter::closeSCI() { // Termination of SCI sci_error_t err; DBUG_ENTER("SCI_Transporter::closeSCI"); // Disconnect and remove remote segment disconnectRemote(); // Unmap and remove local segment disconnectLocal(); // Closes an SCI virtual device SCIClose(activeSCIDescriptor, FLAGS, &err); if(err != SCI_ERR_OK) { DBUG_PRINT("error", ("Cannot close SCI channel to the driver. Error code 0x%x", err)); } SCITerminate(); DBUG_VOID_RETURN; } // closeSCI()
int main(int argc,char *argv[]) { int counter; printf("\n %s compiled %s : %s\n\n",argv[0],__DATE__,__TIME__); if (argc<3) { Usage(); exit(-1); } /* Get the parameters */ for (counter=1; counter<argc; counter++) { if (!strcmp("-rn",argv[counter])) { // remoteNodeId = strtol(argv[counter+1],(char **) NULL,10); continue; } if (!strcmp("-size",argv[counter])) { segmentSize = strtol(argv[counter+1],(char **) NULL,10); continue; } if (!strcmp("-adapterno",argv[counter])) { localAdapterNo = strtol(argv[counter+1],(char **) NULL,10); continue; } if (!strcmp("-client",argv[counter])) { client = 1; continue; } if (!strcmp("-server",argv[counter])) { server = 1; continue; } if (!strcmp("-help",argv[counter])) { Usage(); exit(0); } } // if (remoteNodeId == 0) { // fprintf(stderr,"Remote node-id is not specified. Use -rn <remote node-id>\n"); // exit(-1); //} if (server == 0 && client == 0) { fprintf(stderr,"You must specify a client node or a server node\n"); exit(-1); } if (server == 1 && client == 1) { fprintf(stderr,"Both server node and client node is selected.\n"); fprintf(stderr,"You must specify either a client or a server node\n"); exit(-1); } /* Initialize the SISCI library */ SCIInitialize(NO_FLAGS, &error); if (error != SCI_ERR_OK) { fprintf(stderr,"SCIInitialize failed - Error code: 0x%x\n",error); exit(error); } /* Open a file descriptor */ SCIOpen(&sdOne,NO_FLAGS,&error); if (error != SCI_ERR_OK) { if (error == SCI_ERR_INCONSISTENT_VERSIONS) { fprintf(stderr,"Version mismatch between SISCI user library and SISCI driver\n"); } fprintf(stderr,"SCIOpen failed - Error code 0x%x\n",error); exit(error); } /* Open a file descriptor */ SCIOpen(&sdTwo,NO_FLAGS,&error); if (error != SCI_ERR_OK) { if (error == SCI_ERR_INCONSISTENT_VERSIONS) { fprintf(stderr,"Version mismatch between SISCI user library and SISCI driver\n"); } fprintf(stderr,"SCIOpen failed - Error code 0x%x\n",error); exit(error); } /* Get local node-id */ error = GetLocalNodeId(localAdapterNo, &localNodeId1); error = GetLocalNodeId(standbyAdapterNo, &localNodeId2); if (error != SCI_ERR_OK) { fprintf(stderr,"Could not find the local adapter %d\n", localAdapterNo); SCIClose(sdOne,NO_FLAGS,&error); SCIClose(sdTwo,NO_FLAGS,&error); exit(-1); } /* Print parameters */ PrintParameters(); if (client) { remoteNodeId1=324; remoteNodeId2=328; ShmemClientNode(); } else { remoteNodeId1=452; remoteNodeId2=456; ShmemServerNode(); } /* Close the file descriptor */ SCIClose(sdOne,NO_FLAGS,&error); SCIClose(sdTwo,NO_FLAGS,&error); if (error != SCI_ERR_OK) { fprintf(stderr,"SCIClose failed - Error code: 0x%x\n",error); } /* Free allocated resources */ SCITerminate(); return SCI_ERR_OK; }
void interrupt_handler(int signal) { SCITerminate(); exit(EXIT_FAILURE); }
////////////////////////////////////////////////////// // désallocation des ressources SCI // TODO : faire ça un peu mieux.. mettre des messages int sci_cleanup(void) { // fermeture de la lib SISCI SCITerminate(); return SUCCESS; }