電子書籍の厳選無料作品が豊富!

DB(Sybase)を使用したCのプログラムを実行時にバスエラーがおきてしまいます。
そのとき、Coreファイルと同じタイミングでsybinit.err
というファイルができ、その内容が
Open Client Message:
Message number: LAYER = (5) ORIGIN = (3) SEVERITY = (5) NUMBER = (131)
Message String: ct_init(): ネットワーク・パケット・レイヤ: 内部 Net Library エラー: スレッドの生成ができませんでした。

という内容がかかれています。
coreファイルをダンプしてみたところエラ落ちてる個所をさしてるのがデータベース接続のあたりらしいのですが、
さっぱり検討がつきません。
※そのデータベース接続関数は何回も通る処理で
ループの中で同じ処理をくりかえしていて、ループの途中で落ちてしまいます。

なんでもいいので、参考程度とか思い当たる節があるかた
お願いします。m(__)m

A 回答 (1件)

エラーの内容からは ct_init() というSYBASEに


アクセスするための構造体の初期化に失敗したことを
意味しているので、Busエラーは初期化されていない
構造体に触ってしまうためにおきているのでしょう。
CT_LIBのバグの可能性もありますが、もう少し具体的な
コードなどを示していただかないとわからないです。
ただしSQLの部分だけループさせるように書き直せば
エラーは回避できるかもしれません。
接続ユーザを変えたいというニーズがあれば別ですが、
接続のし直しは負荷を多くするだけです。

ct_ctx_alloc
ct_init
ct_connect
ct_cmd_alloc

SQLの送信と結果の処理
(ここをループさせる)

ct_command
ct_send
:

SQLの処理終わり

ct_cmd_drop
ct_close
ct_exit
ct_ctx_drop
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!