static void stopListening(int i) { fprintf(stderr,"signal %d received\n",i); if( dbh) doQ("profiler.stop();"); stop_disconnect: // show follow up action only once if(dbh) mapi_disconnect(dbh); exit(0); }
SQLRETURN SQL_API SQLDisconnect(SQLHDBC ConnectionHandle) { ODBCDbc *dbc = (ODBCDbc *) ConnectionHandle; #ifdef ODBCDEBUG ODBCLOG("SQLDisconnect " PTRFMT "\n", PTRFMTCAST ConnectionHandle); #endif if (!isValidDbc(dbc)) return SQL_INVALID_HANDLE; clearDbcErrors(dbc); /* check connection state, should be connected */ if (!dbc->Connected) { /* Connection does not exist */ addDbcError(dbc, "08003", NULL, 0); return SQL_ERROR; } while (dbc->FirstStmt != NULL) if (ODBCFreeStmt_(dbc->FirstStmt) == SQL_ERROR) return SQL_ERROR; /* client waves goodbye */ mapi_disconnect(dbc->mid); mapi_destroy(dbc->mid); dbc->mid = NULL; dbc->cachelimit = 0; dbc->Mdebug = 0; dbc->Connected = 0; return SQL_SUCCESS; }
CAMLprim value mapi_disconnect_stub(value conn) { MapiMsg msg = mapi_disconnect((Mapi) conn); return Val_int(index_of_msg(msg)); }